AFNetworking针对不同内容的不同缓存设置

时间:2014-06-18 09:01:35

标签: ios caching afnetworking afnetworking-2

我正在使用AFNetworking 2:

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

我有不同类型的内容:

  • 很少变化并且有很长失效日期的小内容
  • 经常更改并且到期日期较短的小内容
  • 大图像(100KB-200KB)

如果用户打开100张大图像,这些图像将占用所有缓存内容怎么办?我认为大图像将取代我的小内容,即使它还没有过期。我该如何解决?我可以将内存分成两部分(首先是小内容,第二部分是大图像),还是应该为这些类型的内容使用不同的AFHTTPSessionManager子类和不同的缓存策略?

1 个答案:

答案 0 :(得分:2)

无论您是否使用AFNetworking,所有可缓存的网址请求都使用相同的NSURLCache。创建一个新的AFNetworking会话管理器不会有所作为。

NSURLCache会将旧请求从内存移动到磁盘。它不在文档中,但我敢打赌,如果内容被清除,那么NSURLCache会在决定要删除的内容时权衡访问频率和到期日期。

如果需要保证某些数据可用,您应该自己将其写入磁盘。否则,你应该让NSURLCache做它的事情。

如果你不喜欢这个答案,另一种方法是使用像SDWebImage这样的库(或自己动手),它不使用NSURLCache但是实现了自己独立的缓存机制。这样,您的大图像就不会干扰您的缓存。