繁体   English   中英

NSURLCache不起作用

[英]NSURLCache doesn't work

我在应用程序委托中初始化了NSURLCache,如下所示:

int cacheSizeMemory = 4*1024*1024;  // 4MB
int cacheSizeDisk   = 32*1024*1024; // 32MB
MyServerCache *sharedCache = [[MyServerCache alloc] initWithMemoryCapacity:cacheSizeMemory diskCapacity:cacheSizeDisk diskPath:@"nsurlcache"];
[MyServerCache setSharedURLCache:sharedCache]; 

然后,我创建一个具有默认缓存策略的请求并调用:

[NSURLConnection sendSynchronousRequest: urlRequest
                      returningResponse: &response
                                  error: pError ];

响应的类型为“ application / json”,并且“ Cache-Control”设置为“ private,max-age = 600”。 响应仅为874字节(不应太大以至于无法缓存),但是NSURLCache似乎不起作用。

我已经在模拟器上运行了它,并寻找了似乎不存在的磁盘上缓存,因此我将NSURLCache(MyServerCache)子类化,并覆盖以下方法以查看它们是否被调用:

-(NSCachedURLResponse *)cachedResponseForRequest:(NSURLRequest *)request
{
  NSLog(@"Returning cached response for request:  %@", request);
  return [super cachedResponseForRequest:request];
}

-(void)storeCachedResponse:(NSCachedURLResponse *)cachedResponse forRequest:(NSURLRequest *)request
{
  NSLog(@"Caching response for request: %@", request);
  [super storeCachedResponse:cachedResponse forRequest:request];
}

无论我做什么(我已经尝试了几种不同的API和响应),NSURLCache似乎都从不缓存任何内容。 我无法在文件系统中找到磁盘上的缓存,并且从未在我的NSURLCache(MyServerCache)的子类上调用上述方法。

我真的很想使用它而不是滚动自己的缓存,但是我不知道为什么它不起作用或如何使其起作用。 请帮忙。

您必须使用NSURLRequestUseProtocolCachePolicy创建请求,并且该请求与NSURLCache完美兼容。

NSURLRequestCachePolicy cachePolicy = NSURLRequestUseProtocolCachePolicy;
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url
                                                       cachePolicy:cachePolicy 

您可以在此处阅读有关NSURLRequestCachePolicy的信息: https : //developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSURLRequest_Class/#//apple_ref/c/tdef/NSURLRequestCachePolicy

有点令人困惑的是,iOS总是返回200 - Success因此当响应来自缓存时,您将永远不会获得304 - Resource not Modified 因此,在监视服务器端时更容易看到缓存策略在起作用。

您可以使用https://github.com/PaulEhrhardt/Simple-Cache-Test来验证缓存控制,过期和带有少量本地ruby服务器的ETag。 只需几行即可设置。 我已经成功使用7.1和8.4 iOS SDK进行了测试。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM