iphone - NSURLConnection 是否利用了 NSURLCache?

标签 iphone nsurlconnection nsurlrequest

我正在尝试弄清楚如何使用 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/

相关文章:

ios - Pushwoosh 远程通知

iphone - 构建 2.2.1 时可以使用 iPhone 3.0 符号吗?

iphone - 线程与异步调用

nsurlconnection - Domain=NSURLErrorDomain Code=-1001 "The operation couldn’ 待完成。 (NSURLErrorDomain 错误-1001。)”

iphone - 将 int 转换为 CGFloat

iphone - XCode 4 中的 iOS 跟踪?

ios - NSURLConnection 委托(delegate)适用于 iOS 9 和 10?

ios - 每次请求完成后执行 NSURLConnection sendAsynchronousRequest "in order"的次数

iphone - NSURLConnection 在 iOS 设备上重定向,但在模拟器上不重定向

iOS 推特 NSURLErrorDomain Code=-1012