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

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

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

最佳答案

Is there a way to detect how much space the app has used up out of its total allocated space?

应用程序对总分配空间没有限制,它们受设备空间量的限制.您可以使用NSFileManager扫描目录,找出这些文件使用的空间大小.有几种方法以不同的方式执行此操作 – 例如,请查看enumeratorAtPath :.对于每个文件,请使用attributesOfItemAtPath:error:等方法来获取文件大小.

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

Additionally, what is the best way to go about cleaning those directories; do I check every time a file is written or only on app launch, ect ect.

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

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

点赞