我正在构建一个广泛使用 CoreData 的应用程序,并且我的许多模型都具有 UIImage 和 NSData 属性(用于图像和视频)。由于将数据直接存储到 CoreData 中并不是一个好主意,因此我构建了一个文件管理器类,该类根据创建的上下文和媒体类型将文件写入文档目录中的不同存储桶中。
我现在的问题是如何管理文档目录?有没有办法检测应用程序已使用其总分配空间中的多少空间?此外,清理这些目录的最佳方法是什么?我是在每次写入文件时检查还是仅在应用程序启动时检查,等等。
有没有办法检测应用程序已使用其总分配空间中的多少空间?
应用程序对分配的总空间没有限制,但受设备上的空间量限制。您可以使用以下命令了解这些文件使用了多少空间NSFileManager
扫描目录。有多种方法可以以不同的方式执行此操作 - 请查看enumeratorAtPath:
, 例如。对于每个文件,使用类似的方法attributesOfItemAtPath:error:
获取文件大小。
更好的方法是在创建和删除文件时跟踪文件大小。保留运行总计,存储在用户默认值中。创建新文件时,将其增加新数据量。当您删除文件时,减少运行总计。
此外,清理这些目录的最佳方法是什么?我是在每次写入文件时检查还是仅在应用程序启动时检查,等等。
如果这些文件是本地数据,本质上是关联的 Core Data 对象的一部分,则明智的方法是在删除文件的 Core Data 对象时删除该文件。被管理对象需要数据文件,因此如果您仍在使用该对象,请不要删除该文件。这意味着必须有某种方法将两者链接起来,但我假设这已经是正确的,因为您说这些文件以某种方式被托管对象使用。
如果文件类似于可以轻松重新创建或重新下载的缓存数据,则应将它们放在由NSTemporaryDirectory()
。然后,当 iOS 认为需要空间时,可以删除它们。您还可以在适当的时候通过扫描旧文件或一段时间未使用的文件来清除旧文件(详细信息取决于您如何使用这些文件)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)