2014-06-18 56 views
0

我使用AFNetworking 2 AFNetworking不同的缓存设置:针对不同的内容

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

,我有不同类型的内容:

  • 很少改变的,有长长的有效期限
  • 含量少
  • 经常变化且有效期过短的小内容
  • 大图像(100KB-200KB)

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

回答

2

无论您是否使用AFNetworking,所有可缓存的URL请求都使用相同的NSURLCache。创建一个新的AFNetworking会话管理器不会有什么区别。

NSURLCache会将较旧的请求从内存移动到磁盘。这不是在文档中,但我敢打赌,如果东西被清除,那么NSURLCache将决定访问的频率与到期日的时间,以决定什么摆脱。

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

如果你不喜欢这个答案,一个替代方案是使用像SDWebImage(或滚动自己的),这不使用NSURLCache,但实现其自己单独的缓存机制。这样你的大图不会干扰你的缓存。