【问题标题】:Saving file to tmp directory when iphone/ipad storage is full当 iphone/ipad 存储已满时将文件保存到 tmp 目录
【发布时间】:2015-05-21 10:52:16
【问题描述】:

假设一个应用在用户浏览应用时从网络下载图像。假设有几乎无限的图像,并且只要用户需要一个新图像就会下载。这些图像被保存到 tmp 目录用于缓存目的。一旦用户关闭应用,所有下载的图片都会被应用删除。

现在,由于有无限的图像,如果用户请求下一张图像,存储已满,应用程序尝试将图像保存到 tmp 目录会发生什么?

iOS 会自动删除之前的图片以提供新图片所需的空间吗? 或者 iOS 会开始清理与其他应用关联的 tmp 目录吗?(如果是,当存储再次满了并且所有其他应用都已经进行了这种清理时会发生什么?) 或者 应用会崩溃吗?

【问题讨论】:

  • 我猜它会开始清理其他应用的tmp文件夹。但是如果你有 iphone 那么你可以测试一下。
  • @InderKumarRathore 感谢您的帮助 Inder,我期待一些 iOS 遵循的协议记录了一些地方但找不到。

标签: ios objective-c iphone swift ipad


【解决方案1】:

如果您尝试将图像保存到磁盘并且磁盘已满,那么 NSData 的

- (BOOL)writeToURL:(NSURL *)aURL
           options:(NSDataWritingOptions)mask
             error:(NSError **)errorPtr

将返回NO,并将错误对象分配给传递给方法的errorPtr。此错误将有一个NSFileWriteOutOfSpaceError。这个错误是非常特殊的,当你得到它时,可以肯定地说系统已经通知用户他的磁盘空间不足了。

话虽如此,关于清洁后可以说很多。如果您不再使用已保存的图像资源,则将其从文件系统中删除。

干杯!

【讨论】:

    【解决方案2】:

    tmp/

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

    这是唯一记录的内容。由此我可以推断,如果您的应用程序正在运行,它不会清除您的tmp,但它可以清除其他未运行的应用程序的tmp

    【讨论】:

    • 这看起来很好。但是,我们无法预测,如果其他应用程序的 tmp 目录被清除,但存储空间又满了,会发生什么。
    • 我们从官方文档中得到的一切,但如果你真的想知道,那么你必须把你的 iphone 充满然后测试这个案例,然后你可能会很好地回答你的问题。知道会发生什么很有趣,要么你可以等待答案,要么你可以自己得到答案。尝试并发布结果:)
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2011-04-05
      • 2018-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-04
      • 1970-01-01
      • 1970-01-01
      • 2013-11-25
      相关资源
      最近更新 更多