iOS - 保存到库/缓存/会导致错误吗?

Posted

技术标签:

【中文标题】iOS - 保存到库/缓存/会导致错误吗?【英文标题】:iOS - Can saving to Library/Caches/ result in error? 【发布时间】:2015-05-31 12:30:21 【问题描述】:

如果应用开始将几乎无限的图像(按需)保存到 /Library/Caches 目录以进行缓存,那么当存储空间已满时会发生什么情况? 保存到缓存文件夹会出错吗?或者如果应用是打开的,iOS会自动清除打开的应用的缓存吗?如果不是,开发人员是否有责任为打开的应用程序启动此清除过程?是否保证尝试将图像保存到 /Library/Caches 将始终成功,无论清除是否需要位置与否?(缓存的图像在退出时由应用清理)。

【问题讨论】:

【参考方案1】:

是的,它可能会导致错误。不,ios 不会在应用程序运行时自动清除它。引用自docs:

缓存

在 iOS 5.0 及更高版本上,系统可能会在系统磁盘空间非常低的极少数情况下删除 Caches 目录。应用程序运行时永远不会发生这种情况

因此,您有责任在运行时清理缓存目录。但是,您可能会在极少数情况下遇到此错误,因为 iOS 会尝试删除其他未运行的应用程序的缓存。

【讨论】:

感谢您指出@Sega-Zero,是否有可能知道缓存中是否有足够的空间来保存另一个图像?或者是否可以检测到需要清除? 嗯,你可以尝试两种方法:1. 尝试写入磁盘,检查是否有错误(相当糟糕的方法,但足够安全) 2. 检查可用空间并比较节省块大小.这可以通过非常简单的代码来完成,如下所示:NSError *error = nil; NSString *dir = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0]; NSDictionary *attrs = [[NSFileManager defaultManager] attributesOfFileSystemForPath:dir error:&error]; if ([[attrs valueForKey:NSFileSystemFreeSize] unsignedLongLongValue] < picSize) save();

以上是关于iOS - 保存到库/缓存/会导致错误吗?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 CURRENT_DATE() 会导致查询不被缓存?

你知道如何用多级缓存提升秒杀系统的服务性能吗

通过 callproc 调用存储过程会导致缓存膨胀吗?

关闭内存缓存对效能有影响吗

Swift iOS:将视频保存到库

缓存击穿问题与缓存设置顺序原则