我正在尝试弄清楚如何使用 URL 加载框架来利用缓存来加载 URL。
我正在使用 NSURLConnections 并向它们提供 NSURLRequests。我什至将这些请求的缓存策略设置为 NSURLRequestReturnCacheDataElseLoad。我第一次加载请求时,它会自动放入缓存中([NSURLCache sharedCache]
有它)。但下次我加载相同的请求时,NSURLConnection 似乎会忽略缓存中的内容并重新加载数据。
我应该手动实现缓存查找并返回缓存数据吗? NSURLConnection 不这样做吗?或者有什么方法可以让框架无缝地使用缓存?
更新:尝试了以下操作但没有成功:
- 将请求缓存策略设置为
NSURLRequestReturnCacheDataElseLoad
而不是NSURLRequestUseProtocolCachePolicy
- 重新使用请求对象而不是创建新的请求对象
- 使用
+[NSURLConnection sendSynchronousRequest:returningResponse:error:]
而不是异步加载
最佳答案
注意 iOS 5 及以上版本提供了具有内存和磁盘容量两者的sharedURLCache。
除非您将 NSURLCache 设置为具有一定的容量,否则不会缓存任何内容:
// A 10MB cache. This a good avatar-image-cache size but might be too
// large for your app's memory requirements. YMMV.
[[NSURLCache sharedURLCache] setMemoryCapacity:1024*1024*10];
默认的 iPhone NSURLCache 实例拒绝缓存到磁盘。如果你需要这种行为,你必须子类化 NSURLCache 并实现你自己的磁盘缓存。我在 GitHub 上找到了许多磁盘缓存的示例,但恕我直言,它们都没有令人满意地完成完全必要的“修剪”步骤。
关于iphone - NSURLConnection 是否利用了 NSURLCache?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1870004/