使用 AFNetworking 进行图像缓存

Posted

技术标签:

【中文标题】使用 AFNetworking 进行图像缓存【英文标题】:Image Caching With AFNetworking 【发布时间】:2015-06-29 11:44:11 【问题描述】:

AFNetworking 的缓存机制对我不起作用,我有一张 500ko 的大尺寸图像,我想缓存它。但是每次我关闭应用程序并再次打开它时,我都必须等待 20 秒才能加载图像,因此缓存系统无法正常工作是代码:

我试过了:

[imageView setImageWithURL:[NSURL URLWithString:imageURL]
      placeholderImage:[UIImage imageNamed:@"placeholder"]];

然后尝试:

NSURLRequest *imageRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:imageURL]
                                          cachePolicy:NSURLRequestReturnCacheDataElseLoad
                                      timeoutInterval:60];

[imageView setImageWithURLRequest:imageRequest
             placeholderImage:[UIImage imageNamed:@"placeholder"]
                      success:nil
                      failure:nil];

【问题讨论】:

也许 500kb 太多了?知道最大可缓存图像大小是多少吗? 我可以看看你是如何配置缓存的吗? @Ricardo:其实我就是这么干的,还需要在其他地方配置缓存吗? @pe60t0:我想处理所有情况,所以我正在使用大图像进行测试。如何找到最大可缓存图像大小? @pe60t0 正如你所提到的,大小差不多 【参考方案1】:

NSURLCache 默认不会写入磁盘,所以我们需要在应用委托中声明一个共享的 NSURLCache:

NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:2 * 1024 * 1024
                                          diskCapacity:100 * 1024 * 1024
                                          diskPath:nil];
[NSURLCache setSharedURLCache:sharedCache];

Reference

【讨论】:

我应该手动将图像传递到这个sharedCache 还是AFNetworking 会为我们做这件事。在我的情况下,当我重新打开应用程序时,它没有使用缓存的图像。

以上是关于使用 AFNetworking 进行图像缓存的主要内容,如果未能解决你的问题,请参考以下文章

[AFN]AFNetworking错误总结

iOS开发之AFN的基本使用

IOS AFN (第三方请求)

缓存策略,AFNetworking

使用 AFNetworking 缓存更大的图像

AFN使用etag进行网络缓存