首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么时候从urlcache的内存和磁盘中移除东西?

什么时候从urlcache的内存和磁盘中移除东西?
EN

Stack Overflow用户
提问于 2017-09-08 15:52:22
回答 1查看 1.6K关注 0票数 5
代码语言:javascript
复制
let memoryCapacity = 200 * 1024 * 1024
let diskCapacity = 1 * 1024 * 1024
let cache = URLCache(memoryCapacity: memoryCapacity, diskCapacity: diskCapacity, diskPath: "myDataPath")
URLCache.shared = cache

Scenario1

我将urlcache的内存设置为200 1mb,将磁盘空间设置为1MB。然后我下载一张图片。关闭互联网并强制退出应用程序,通过点击再次启动应用程序,并触发呼叫(以下载图像),但它会立即崩溃,因为datanil

不用说,如果我关闭了互联网,它仍然会像预期的那样从缓存中读取,不会发生崩溃。

Scenario2

如果我将diskCapacity设置为200 it (let diskCapacity = 200 * 1024 * 1024),那么即使缓存被从内存中清除,映像仍然保存在磁盘中;它将始终显示!

基于这一观察,我有以下问题:

  • 正确的说法是,每次您强制退出或应用程序因内存警告/问题而崩溃时,您的缓存将被刷新,尽管它会使您的磁盘保持完整?
  • 缓存可以从内存中刷新的其他原因吗?
  • 存储在磁盘中的东西什么时候能被移除?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-08 16:23:58

简短答覆:

当应用程序终止时(或者,可能也是在内存压力下),内存缓存就会丢失。磁盘缓存在应用程序的多个调用中持续存在,但如果设备耗尽持久存储,操作系统从缓存和临时文件夹中回收空间,则可以删除。

较长的答覆:

你问:

正确的说法是,每次您强制退出或应用程序因内存警告/问题而崩溃时,您的缓存将被刷新,尽管它会使您的磁盘保持完整?

主要是。可以更准确地说,当应用程序终止时,与应用程序相关的所有内存都会被丢弃,并且只有保存到持久存储的项目才能在应用程序重新启动时被检索。

还有其他地方可以将缓存从内存中释放出来吗?

当应用程序终止时,内存缓存中的所有内容都会丢失。显然还有其他几种情况,在这种情况下,可以删除项:

  • 如果您手动从URLCache中删除响应。
  • 当您接近缓存的最大容量时,将从缓存中移除较旧的单个项,并尝试添加新项,从而迫使旧项退出。
  • 网络响应通常包括缓存策略(指示响应可以安全缓存多长时间),因此很可能在此时删除它们。
  • 在存储器压力(例如.UIApplicationDidReceiveMemoryWarning)的情况下,可以合理地清除存储器缓存。

存储在磁盘中的东西什么时候能被移除?

逻辑与前一点大致相同,只不过(a)它可以在应用程序调用中存活下来);(b)它不会因为内存压力而被刷新,尽管当设备在持久存储上运行不足时,它可以被删除。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46120309

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档