即使在应用重新启动后 URLSession 也会缓存

Posted

技术标签:

【中文标题】即使在应用重新启动后 URLSession 也会缓存【英文标题】:URLSession caching even after app restart 【发布时间】:2018-08-02 15:57:50 【问题描述】:

我刚刚遇到了一些事情,这完全改变了我对 ios 中 URLSession 缓存的印象。

我们击中了一个只会被击中一次的端点。

重新启动应用程序不会再次到达端点。

删除应用会导致它再次到达端点……但只有一次。

响应的头部包含...

Cache-Control public,max-age=1800

所以它归结为缓存。通过手动告诉 URLSession 忽略缓存,它会再次命中端点。

在文档中,它显示了缓存策略及其作为工作流程图的工作原理。

https://developer.apple.com/documentation/foundation/nsurlrequestcachepolicy/nsurlrequestuseprotocolcachepolicy

但是一旦应用程序终止,缓存的数据会存储在哪里?应用程序和与之相关的所有内容肯定会从内存中删除吗?

【问题讨论】:

【参考方案1】:

URLSession 使用 URLCache 作为它的缓存系统。它用于所有网络资源。您可以直接访问它或通过 URLSessionConfiguration 设置您自己的。 URLCache 的底层位置在文件系统上,而不是在内存中。不过,有一种方法可以自己管理缓存。比如说,你的回复应该在设备上加密。稍微不好的例子,但你明白了。 ;)

如果您需要更多地控制缓存,这里有一篇文章如何manage cache programmatically。

【讨论】:

啊。我没有意识到它是基于磁盘的。这很有意义。谢谢☺️

以上是关于即使在应用重新启动后 URLSession 也会缓存的主要内容,如果未能解决你的问题,请参考以下文章

收到推送通知后,Whatsapp 服务在强制停止后重新启动

即使在应用程序卸载后,Cordova LocalStorage 也会保留数据

即使在杀死并重新启动应用程序后,如何在本机 iOS 中下载音频文件?

核心数据删除的项目即使在删除后仍然可见(直到应用重新启动)

即使在我删除它们后,Firebase 值也会不断重新生成

即使重新启动后,我如何每天回忆方法?