如果 NSURLCache 满了怎么办?

Posted

技术标签:

【中文标题】如果 NSURLCache 满了怎么办?【英文标题】:What happens if NSURLCache is full? 【发布时间】:2013-04-09 13:53:27 【问题描述】:

我正在使用默认的 NSURLCache 来缓存我的 iPhone 应用程序中的图像。 如果缓存已满,我会尝试缓存另一张图片会怎样?

它不会缓存图像吗?或者它会被缓存的最旧的图像替换?

非常感谢

【问题讨论】:

文档中没有描述它的行为,但是我希望 Apple 有比 FIFO 更好的东西,例如缓存的响应权重可能会根据缓存命中计数器增加。并且内存/磁盘层的行为很可能有所不同。 如果系统自己增加分配的缓存内存,那么在创建时声明缓存大小的目的是什么?我实际上相信这是一种先进先出但我不确定而且我的测试似乎不准确。如果我的缓存是 50mb 并且被填满,我不确定会发生什么 简单地说,没有一种缓存应该提供任何类型的数据完整性,否则那是一个数据库,而不是一个缓存,你需要以不同的方式处理它。 【参考方案1】:

最大缓存会受到初始化的影响 initWithMemoryCapacity:... diskCapacity:... diskPath:..] 新文件将始终被下载。 (除非它大于最大内存容量,那么它只会被下载而不保存在缓存中) 如果达到最大缓存大小,其他文件将被删除。 未指定将删除哪些文件。 创建自己的 NSUrlCache 并自己处理并不难。 如果您想查看示例,请查看https://github.com/evermeer/EVURLCache

【讨论】:

以上是关于如果 NSURLCache 满了怎么办?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 AlmofireImage 最轻松地将 NSURLCache 的内存容量设置为零?

邮箱满了怎么处理

NSURLCache 和数据保护

NSURLCache 不起作用

NSURLCACHE

线程池被打满该怎么办