用于监视和维护光盘上应用程序大小的解决方案

时间:2014-07-27 18:15:16

标签: ios core-data

我正在构建一个广泛使用CoreData的应用程序,我的很多模型都有UIImage和NSData属性(用于图像和视频)。由于将数据直接存储到CoreData中并不是一个好主意,因此我构建了一个文件管理器类,它将文件写入文档目录中的不同存储桶,具体取决于创建的上下文和媒体类型。

我现在的问题是如何管理文件目录?有没有办法检测应用程序占用的总空间多少?此外,清理这些目录的最佳方法是什么;每次写入文件时或仅在应用程序启动时检查,等等。

1 个答案:

答案 0 :(得分:2)

  

有没有办法检测应用程序占用的总空间占用了多少空间?

应用不会限制总分配空间,它们会受到设备空间量的限制。通过使用NSFileManager扫描目录,您可以了解这些文件使用了多少空间。有几种方法可以用不同的方式执行此操作 - 例如,查看enumeratorAtPath:。对于每个文件,请使用attributesOfItemAtPath:error:之类的方法来获取文件大小。

最好在创建和删除文件时跟踪文件大小。保持运行总计,存储在用户默认值中。创建新文件时,请按新数据量增加该文件。删除文件时,请减少运行总计。

  

此外,清理这些目录的最佳方法是什么;每次写入文件时或仅在应用程序启动时检查,等等。

如果这些文件是本地数据本身就是相关Core Data对象的一部分,那么明智的方法是在删除其Core Data对象时删除文件。托管对象需要数据文件,因此如果您仍然使用该对象,请不要删除该文件。这意味着必须有一些方法来链接这两者,但我认为这已经是真的,因为你说这些文件被托管对象以某种方式使用。

如果文件类似于可以轻松重新创建或重新下载的缓存数据,则应将它们放在NSTemporaryDirectory()返回的位置。然后iOS可以在认为需要空间时删除它们。您也可以在适当的时候清除旧文件,扫描旧文件或暂时不使用的文件(详细信息取决于您使用文件的确切方式)。