Tag: nsurlcache

在iOS上,如果磁盘path存储NSURLCachecaching:nil?

我遇到了这样的代码: NSURLCache *URLCache = [[NSURLCache alloc] initWithMemoryCapacity:1024 * 1024 diskCapacity:1024 * 1024 * 5 diskPath:nil]; 问题是,当diskPath通过nil时,我一直无法find预期的行为。 NSURLCache文档没有明确描述这种情况,也没有用我自己的testing来搞清楚。 caching在哪里存储? 或者是上面的错误代码? 谢谢。

NSURLCache是​​否持续启动?

我正在为iOS应用程序寻找一个networkingcaching解决scheme,这个解决scheme在整个启动阶段是持久的。 我开始阅读有关NSURLCache,但没有看到有关持久性的任何提及。 有没有人知道如何使用NSURLCache,然后closures并打开应用程序的行为? 它是否持续?

如何使用NSURLCache在脱机时返回caching的API响应(iOS应用程序)

我希望有人能够对我一直在研究的几件事情有所了解,但是没有取得太多的进展。 我想利用NSURLCache来返回我在iOS应用程序中进行的API调用的caching响应。 当设备在线时,如果足够近,我想返回caching的响应,否则从远程取回。 当设备离线时,我想立即返回caching的响应(如果有的话),而不pipe它的年龄。 我正在使用AFNetworking 。 我正在做的API调用是由我控制的服务器。 协议是HTTPS。 Cache-Control响应头当前是"max-age=0, public" 。 我目前不设置caching相关的请求头(我应该?)。 我将请求的caching策略设置为脱机时的NSURLRequestUseProtocolCachePolicy并且在线时使用默认的NSURLRequestUseProtocolCachePolicy 。 我可以在磁盘上的默认Cache.db看到请求和响应。 但是,当我脱机时,所有的请求都失败(没有caching的响应(尽pipe看起来已被caching)正被使用/返回。 每个http://nshipster.com/nsurlcache/我初始化didFinishLaunchingWithOptions的sharedURLCache ,并将AFNetworking setCacheResponse块设置为这样的: NSMutableDictionary * mutableUserInfo = [[cachedResponse userInfo] mutableCopy]; NSMutableData * mutableData = [[cachedResponse data] mutableCopy]; NSURLCacheStoragePolicy storagePolicy = NSURLCacheStorageAllowed; return [[NSCachedURLResponse alloc] initWithResponse:[cachedResponse response] data:mutableData userInfo:mutableUserInfo storagePolicy:storagePolicy]; 我已经阅读了关于这个主题的这些和其他post: http://petersteinberger.com/blog/2012/nsurlcache-uses-a-disk-cache-as-of-ios5/ http://blackpixel.com/blog/2012/05/caching-and-nsurlconnection.html 我想知道是否有人在使用标准的NSURLCache之前成功地实现了这个function(对NSURLCache成功案例也很感兴趣,但是Peter S.说,​​支持iOS5磁盘caching,因此不再需要SDURLCache ,也就是说,我想使用默认的内置caching)。 提前致谢!

NSCachedURLResponse返回对象,但UIWebView不解释内容

我正在向UIWebView发送请求。 在加载的网页上有AJAX调用。 我需要分析的AJAXstream量,以确定,如果用户login或不。 为此,我在AppDelegate中安装了NSURLCache: MYURLCache *cache = [[MYURLCache alloc] init]; [NSURLCache setSharedURLCache:cache]; 这个MYURLCache类正确地接收通过webview运行的stream量。 我只能终止AJAX调用。 然后,我产生了一个AJAX调用自己的请求。 这个从web服务器返回完美的响应。 所以现在要做的最后一步是构造NSCachedURLResponse返回对象。 我也pipe理了这个,但是webview在返回对象的时候什么都不做。 如果我只返回零,WebView加载一切正常(零是NSURLCache的消息,没有任何caching,所以web视图应该开始加载它自己)。 – (NSCachedURLResponse *)cachedResponseForRequest:(NSURLRequest *)request { if ([[[request URL] absoluteString] rangeOfString:@"/ajax/"].location == NSNotFound) { return nil; } else { ASIHTTPRequest *asirequest = [ASIHTTPRequest requestWithURL:[request URL]]; [asirequest setValidatesSecureCertificate:NO]; [asirequest startSynchronous]; NSError *error = [asirequest error]; NSData* data = […]

我如何使iOS的caching无效的特定url?

使用NSURLSession的默认caching,如何使特定URL的caching无效? 我注意到NSURLCache的removeCachedResponseForRequest:方法,但是这需要一个NSURLRequest对象,我没有原始请求。 我是否需要在创build它们时存储这些内容,以便将它们传回到removeCachedResponseForRequest:或者,我可以使用相应的URL创build一个新的URL,然后将其作为等效目的,即使它没有与原始相同的头域和其他属性?

NSURLCache不会在iOS8中清除存储的响应

以下是我需要清除caching并调用URL的示例函数 – (void)clearDataFromNSURLCache:(NSString *)urlString { NSURL *requestUrl = [NSURL URLWithString:urlString]; NSURLRequest *dataUrlRequest = [NSURLRequest requestWithURL: requestUrl]; NSURLCache * cache =[NSURLCache sharedURLCache]; NSCachedURLResponse* cacheResponse =[cache cachedResponseForRequest:dataUrlRequest]; if (cacheResponse) { NSString* dataStr = [NSString stringWithUTF8String:[[cacheResponse data] bytes]]; NSLog(@"data str r= %@",dataStr); NSLog(@"url str r= %@",[[[cacheResponse response] URL] absoluteString]); [cache storeCachedResponse:nil forRequest:dataUrlRequest]; [NSURLCache setSharedURLCache:cache]; } [[NSURLCache sharedURLCache] removeCachedResponseForRequest:dataUrlRequest]; […]

如何使用NSURLSession来确定资源是否已经改变?

我正在使用NSURLSession从HTTP服务器请求JSON资源。 服务器使用Cache-Control来限制资源在客户端上的caching时间。 这很好,但我也想caching反序列化的JSON对象,因为它经常被访问,同时继续利用NSURLSession中内置的HTTPcaching机制。 我想我可以保存一些HTTP响应头: Content-MD5 , Etag和Last-Modified与反序列化的JSON对象(我使用这3个字段,因为我注意到并不是所有的HTTP服务器都返回Content-MD5 ,否则这本身就足够了)。 下一次我收到JSON对象的响应,如果这3个字段是相同的,那么我可以重用先前反序列化的JSON对象。 这是一个强大的方式来确定被取消的JSON仍然有效。 如果不是,我该如何确定反序列化的对象是否是最新的?

iOS上的NSURLConnection不会尝试caching大于50KB的对象

尽pipe苹果的文档指出 ,iOS上的NSURLCache根本不做任何磁盘(闪存)caching。 您可以NSURLCache子类,以更改获取和存储操作的行为来使用磁盘(就像SDURLCache一样),但是由于以下严重的caching使用和实现限制, d期望: NSURLConnection甚至不会调用storeCachedResponse:forRequest:对于超过大约50KB( storeCachedResponse:forRequest:是storeCachedResponse:forRequest: 52428字节)的文件。 这使得NSURLCache我们的使用(200KB图像)毫无意义,因为它甚至不会进入caching。 因此,我们必须手动添加高于NSURLConnection的级别的caching。 即使手动调用NSURLCache的内置storeCachedResponse:forRequest:如果响应小于180KB,它只会将响应存储在内存中。 我通过手动调用storeCachedResponse来testing这个,并且看到currentMemoryUsage之前/之后的数据长度在大约180KB以上没有改变。 所以我们也必须编写自己的LRU内存caching。 有没有人注意到这些问题? 还是有什么我失踪? 仅供参考,我在模拟器和iPad 2上运行iOS 4.3。

NSURLCache和ETags

NSURLCache是​​否透明地处理服务器接收的ETags? 我的意思是:是否会自动为每个URL请求存储ETags,然后在提交给相同URL的请求时发送相应的IF-None-Match? 或者我必须自己pipe理它?

删除UIWebView的内部caching

我在UIWebView显示一个Web应用程序,有时页面的内容会改变。 内容更改后,应用程序清除caching。 但是,当我去我以前访问过的页面UIWebView不发送HTTP GET请求,但从caching加载,即使我已经像这样禁用caching: [[NSURLCache sharedURLCache] removeAllCachedResponses]; [[NSURLCache sharedURLCache] setDiskCapacity:0]; [[NSURLCache sharedURLCache] setMemoryCapacity:0]; 最初我正在用cachePolicy cachePolicy:NSURLRequestReturnCacheDataElseLoad加载一个请求cachePolicy:NSURLRequestReturnCacheDataElseLoad 。 [self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:myURLString] cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:10.0]]; UIWebView有一些内部caching。 已经访问过的页面将从这个内部caching加载,而不是通过NSURLCache ,也没有请求发送。 有没有办法清除UIWebView的内部caching? 我甚至重新创buildUIWebView但caching仍然存在。