【发布时间】:2013-08-26 19:55:03
【问题描述】:
我正在为我的 iOS 应用程序寻找一个在启动时保持不变的网络缓存解决方案。我开始阅读 NSURLCache,但没有看到任何关于持久性的提及。有谁知道当您使用 NSURLCache 然后关闭并打开应用程序时这是如何表现的?会持续吗?
【问题讨论】:
-
更清楚一点,无论何时使用
NSURLConnection,它都会根据缓存策略和响应缓存头将结果缓存在内存和磁盘上。磁盘缓存意味着跨负载的持久性,我可以亲自验证这种行为。 -
@Rob 如果没记错的话,
NSURLCache在 iOS 5 中的行为发生了变化,这也是苹果开始区分操作系统可能随时删除的文件、应该通过 iCloud 同步的文件和用于这些都不是真的。那么您的来源可能来自 5 之前的世界吗? -
@Tommy 做了一些研究,我发现持久存储缓存很挑剔,但在 iOS 中有效。我发现如果 (a) 您使用默认的
NSURLRequestcachePolicy或NSURLRequestUseProtocolCachePolicy,它不会缓存到持久存储;但是 (b) 响应不包括Cache-Control标头。但是,如果您使用NSURLRequestReturnCacheDataElseLoad中的cachePolicy,或者如果来自服务器的响应指定了特定的Cache-Control标头(例如public, max-age=1835400),它将缓存到持久存储。或者您也可以手动添加到NSURLCache。 -
您的措辞可能令人困惑。如果我错了,请纠正我:通常:缓存和持久性是正交的。 缓存是为了提高性能,根据需要可能会或可能不会持久化。 持久性只是“我如何在应用重启时持久化任何数据?”任何持久性技术都可以用作持久化“缓存”数据的后端。因为缓存数据只是数据。术语“缓存”只是传达数据的预期用例。 特别是:您在这里谈论的是通过不同的启动来持久化缓存,我认为这是正确的。
标签: ios nsurlcache