将图像存储在Core Data或文件中?

我也有一套包含图像的数据。 我想要caching这些数据。 我应该将它们存储在文件系统还是核心数据上?为什么?

有两个主要的select:

  1. 将文件存储在磁盘上,然后将path存储到核心数据中
  2. 将图像的二进制数据存储在核心数据中

我个人更喜欢第一个选项,因为它允许我select何时将内存中的实际图像加载。 这也意味着我不必记住原始数据的格式; 我可以使用path来分配/ init一个新的UIImage对象。

您可能需要从“核心数据编程指南”中阅读如何处理二进制大对象(BLOB)。 有什么规模的二进制数据应该和不应该被存储在实际的核心数据存储中的经验法则。

你也可以看看Core Data iPad / iPhone BLOBS vs文件系统的20k PDF

如果您将二进制数据放置在Core Data存储区中,则最好有一个包含实际数据的“Data”实体,并将“Image”实体分开。 在这两个实体之间创build一个关系,这样只有在实际需要时才能加载“数据”。 “Image”实体可以保存标题,数据types等元数据。

至于在哪里存储用户数据/文件(我发现“应用程序支持”是一个体面的位置,因为我对用户移动,删除或更改文件的方式会导致图像无法移动被我的应用程序稍后恢复和使用)

以“我的世界”为例,例如。 “〜/ Library / Application Support / minecraft / saves /”

我会同意以前的评论和存储path的核心数据中的图像,但否则将图像本身存储为自己的文件夹外的核心数据文件夹中的文件。