我刚刚花了很长时间在NSURLCache上大喊大叫,所以我提供了一些建议,希望别人可以避免我的不幸。
这一切都开始得相当合理。我的新应用程序项目仅针对iOS 5及更高版本,因此我认为我可以利用新的NSURLCache实现来满足我的所有Web缓存需求。我需要NSURLCache的自定义子类来处理一些特殊任务,但API似乎都有所帮助。快速阅读文档,我即将参加比赛:
[NSURLCache setSharedURLCache:[[MyCustomCache alloc] initWithMemoryCapacity:8 * 1024 * 1024 //8mb
diskCapacity:32 * 1024 * 1024 // 32mb
diskPath:@"webcache.db"]];
我认为8mb缓存可以启动,我会用更大的磁盘缓存来支持它,这样我们就可以在本地提供更多更大的图像。我连接其余的网络代码以使用NSURLConnection(实际上,我使用过 MKNetworkKit,但结果证明是无关紧要的),并期待我的缓存中的好东西。果然,所有应该缓存的请求都会尽职尽责地保存到缓存中,并且当从缓存中提供响应时,响应会尽快快速地返回。这是Penrance of Penzance的常规制作,在我的网络堆栈中飞来飞去。
除非有些东西没有加起来。可以从缓存提供的请求仍然通过网络传出。除非他们不是。 高速缓存是否实际用于提供请求似乎完全随机且间歇性。 我沮丧地撕掉了我的头发,并从字面上挖掘了所有试图弄清楚发生了什么的东西。我构建测试应用程序,在整个地方设置断点,撕掉数据包跟踪,读取互联网上提到NSURLCache的每个单词,试验缓存控制标题,注释掉代码,绕过我的子类,甚至通过艰苦地追踪为NSURLCache及其CFNetworking朋友组装,试图了解下面的神秘逻辑。我大量提高了我对ARM和Objective-C调用约定的知识,并对低级调试有了一些了解,但实际上无法弄清楚发生了什么。整个事情感觉更像是Iolanthe的 梦魇之歌 而不是海盗王的良性独裁统治,而我几乎将它扔掉了。
TL / DR版本:NSURLCache似乎正在工作,但即使它们可用,也会随机返回缓存的结果。