Ios 监控和维护App'的解决方案;光盘上的大小

Ios 监控和维护App'的解决方案;光盘上的大小,ios,core-data,Ios,Core Data,我正在构建一个广泛使用CoreData的应用程序,我的很多模型都有UIImage和NSData属性(用于图像和视频)。由于直接将数据存储到CoreData中不是一个好主意,因此我构建了一个文件管理器类,根据创建的上下文和媒体类型将文件写入documents目录中的不同存储桶 我现在的问题是如何管理文档目录?有没有办法检测应用程序在其总分配空间中使用了多少空间?此外,清理这些目录的最佳方式是什么;我是在每次写入文件时检查还是仅在应用程序启动时检查 有没有办法检测应用程序在其总分配空间中使用了多少空

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

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

有没有办法检测应用程序在其总分配空间中使用了多少空间

应用程序对分配的总空间没有限制,它们受到设备上空间大小的限制。通过使用
NSFileManager
扫描目录,您可以了解这些文件使用了多少空间。有几种方法以不同的方式实现这一点——例如,请查看
枚举器路径:
。对于每个文件,使用类似于
attributesFiteMatPath:error:
的方法获取文件大小

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

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

如果这些文件是本地数据,本质上是相关核心数据对象的一部分,那么明智的方法是在删除核心数据对象时删除文件。托管对象需要数据文件,因此如果仍在使用该对象,请不要删除该文件。这意味着必须有某种方式将两者联系起来,但我假设这已经是事实,因为您说这些文件是由托管对象以某种方式使用的


如果文件类似于缓存数据,很容易重新创建或重新下载,则应将它们放在
NSTemporaryDirectory()
返回的位置。然后iOS可以在认为需要空间时删除它们。您还可以在适当的时候清除旧文件,方法是扫描旧文件或一段时间没有使用过的文件(详细信息取决于您如何使用这些文件)。

哇,这非常有用。我甚至不知道
NSTemporaryDirectory()
存在!这些文件几乎只是UIImage和视频的NSData表示,例如用户帖子或用户组图像,它们与CoreData对象松散关联,因此我想我可能会覆盖ObjectiveRecord中的delete方法,并在删除模型时删除这些文件。这是否意味着应用程序可以扩展到没有大小限制?(理论上当然)唯一的限制是设备上的可用空间,没有具体的每个应用程序的限制。