当iPhone/iPad存储空间已满时将文件保存到tmp目录

5
假设一个应用程序在用户浏览应用程序时从网络下载图像。假设有无限数量的图像,每当用户需要新的图像时就会下载一个新图像。这些图像保存在tmp目录中以进行缓存。一旦用户关闭应用程序,应用程序将删除所有已下载的图像。
现在,由于图像数量是无限的,如果用户请求下一个图像时,存储空间已满,并且应用程序尝试将图像保存到tmp目录中,会发生什么?
iOS会自动删除之前的图像以提供所需的空间吗? 还是 iOS会开始清理与其他应用程序相关联的tmp目录?(如果是,当存储空间再次满时,所有其他应用程序的此类清理已经完成,会发生什么?) 还是 应用程序会崩溃?

我猜它会开始清理其他应用程序的“tmp”文件夹。但如果你有iPhone,你可以测试一下。 - Inder Kumar Rathore
@InderKumarRathore,感谢您的帮助,Inder。我本来期望能够在某个地方找到iOS遵循的某些协议的文档,但是没有找到。 - Mohit Singh
3个回答

1
如果您尝试将图像保存到磁盘,而磁盘已满,则NSData的
- (BOOL)writeToURL:(NSURL *)aURL
           options:(NSDataWritingOptions)mask
             error:(NSError **)errorPtr

将返回NO,并将错误对象分配给传递到该方法中的errorPtr。此错误将具有NSFileWriteOutOfSpaceError。这个错误非常异常,当您获得它时,可以安全地说系统已经通知用户磁盘空间不足。话虽如此,关于自我清理还有很多可以说的。如果您不再使用保存的图像资源,则从文件系统中删除它。祝福!

0

tmp/

使用此目录编写不需要在应用程序启动之间保留的临时文件。当不再需要文件时,您的应用程序应从此目录中删除文件;但是,系统可能会在您的应用程序未运行时清除此目录。 此目录的内容不受iTunes备份。

这就是唯一记录的事情。从这个可以推断出,如果您的应用程序正在运行,则不会清除您的tmp,但它可能会清除其他未运行的应用程序的tmp


那看起来完全没问题。但是,我们无法预测如果其他应用程序的tmp目录被清除,但存储再次满了会发生什么。 - Mohit Singh
这是我们从官方文档中得到的所有信息,但如果你真的想知道,那么你必须充分利用你的 iPhone 然后测试这个案例,然后你可能可以很好地回答你的问题。了解会发生什么很有趣,你可以等待答案,也可以自己亲身尝试并发布结果 :) - Inder Kumar Rathore

0

正如@InderKumarRathore所说,文档暗示系统在您的应用程序运行时不会从临时目录中删除文件。文档也不保证系统会删除其他应用程序临时目录中的内容以为您腾出空间。

我建议进行防御性编码:跟踪临时目录中最旧/最近未使用的文件,并自行删除它们。预先检查文件保存以确保有足够的空间,并在没有足够空间保存文件时向用户显示消息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接