【问题标题】:Can I force NSURLConnection to load from cache?我可以强制 NSURLConnection 从缓存中加载吗?
【发布时间】:2012-05-21 22:34:53
【问题描述】:

我曾考虑编写自定义 url 缓存,但似乎 NSURLCache 应该支持磁盘缓存。我想让我的 iphone 应用程序使用缓存的响应而不访问服务器,直到资源变得陈旧(由我从服务器发回的标头确定)。

我必须用 NSURLConnection 来调用一些花哨的东西吗?如何让 iphone 使用 url 的缓存版本?

更新:这是我的代码的链接

http://pastie.org/808549

【问题讨论】:

  • 必须手动调用cachedResponseForRequeststoreCachedResponse吗?

标签: iphone cocoa-touch http


【解决方案1】:

我认为您可能需要在 NSURLRequest 中添加“cachePolicy”:

NSURLRequestReturnCacheDataElseLoad 缓存策略会导致 URL 加载系统以使用缓存数据 忽略它的年龄或到期日期, 如果存在,则从 原始来源仅当存在 没有缓存版本。

http://developer.apple.com/mac/library/DOCUMENTATION/Cocoa/Conceptual/URLLoadingSystem/Concepts/CachePolicies.html#//apple_ref/doc/uid/20001843

那里有一些不同的政策。也许其中一个会有所帮助。

【讨论】:

  • 似乎默认策略应该有效。问题不在于它是否从缓存中加载,而在于它甚至没有将其存储在缓存中。谢谢。我会尝试其中的几个。
  • 切换似乎没有任何作用。看来我可能不得不自己写:(
  • 刚刚在寻找其他内容时发现了这个示例代码:developer.apple.com/iphone/library/samplecode/URLCache/…
  • 是的,这个例子是手工完成的——我希望避免它:) 谢谢
【解决方案2】:

很遗憾,答案是 iPhone 无法使用 NSURLCache 进行磁盘缓存,因此不适合我概述的场景。

我正在开设自己的课程。

【讨论】:

  • 在 iOS4 中仍然如此吗?
  • iPhone 是否支持内存缓存?实际上,我实现了与您在链接上发布的代码相同的代码,但委托 -(NSCachedURLResponse *)connection:(NSURLConnection *)connection willCacheResponse:(NSCachedURLResponse *)cachedResponse 在我的情况下未执行:(
【解决方案3】:

边看边看 ASI 课程。

http://allseeing-i.com/ASIHTTPRequest/

他们很漂亮。

【讨论】:

    【解决方案4】:

    如果您在请求中使用 etag,使用 @typeoneerror 描述的策略进行缓存似乎可以正常工作。

    【讨论】:

      猜你喜欢
      • 2021-05-28
      • 1970-01-01
      • 1970-01-01
      • 2016-02-27
      • 1970-01-01
      • 2012-03-28
      • 2011-05-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多