缓存策略,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的主要内容,如果未能解决你的问题,请参考以下文章

聊聊缓存回收策略跟缓存更新策略

缓存策略的选择

iOS web缓存策略以及手动清除缓存

高并发系统:缓存使用-读写策略

联合阅读浏览器缓存策略

缓存策略