缓存策略,AFNetworking
Posted
技术标签:
【中文标题】缓存策略,AFNetworking【英文标题】:Cache strategy, AFNetworking 【发布时间】:2014-02-16 23:10:49 【问题描述】:我下载图像并在我的应用程序中使用它。我有 100 多张图像,而且我不是一次全部使用它。我将使用缓存。然后我加载我保存到缓存的所有图像。然后我将转到应用程序的其他部分,我将使用一些图像。
我不太了解 ios 缓存是如何工作的,我有一个问题:加载所有图像并将其保存到缓存后,我应该如何使用这些图像,我的意思是,我需要从缓存中加载它们或使用图像实例我在保存它之前有缓存吗?
什么缓存策略对 AFNetworking 2.0 更有用?
【问题讨论】:
【参考方案1】:AFNetworking 具有用于图像的内存缓存。如果您有 100 张图片,它可能适合您,但可能不适合。
您还应该在此处阅读 NSURLCache - http://nshipster.com/nsurlcache/。
如果您使用 NSURLCache,则不必考虑缓存 - 当您开始下载已缓存的内容时,系统只会为您提供下载的文件。
更新: 下载数据的过期时间由服务器作为响应设置。但是您可以通过 NSURLConnectionDelegate 方法编辑或忽略它。示例:
- (NSCachedURLResponse *)connection:(NSURLConnection *)connection willCacheResponse:(NSCachedURLResponse *)cachedResponse
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse*)[cachedResponse response];
// Look up the cache policy used in our request
if([connection currentRequest].cachePolicy == NSURLRequestUseProtocolCachePolicy)
NSDictionary *headers = [httpResponse allHeaderFields];
NSString *cacheControl = [headers valueForKey:@"Cache-Control"];
NSString *expires = [headers valueForKey:@"Expires"];
if((cacheControl == nil) && (expires == nil))
NSLog(@"server does not provide expiration information and we are using NSURLRequestUseProtocolCachePolicy");
return nil; // don't cache this
return cachedResponse;
【讨论】:
我可以将 NSURLCache 与 AFNetworking 图像响应一起使用吗? 好的,很好,最后一个问题,直到我不能接受你的回答,我该如何设置存储缓存的时间?以上是关于缓存策略,AFNetworking的主要内容,如果未能解决你的问题,请参考以下文章