Core data 将图像存储在核心数据中还是作为文件?

Core data 将图像存储在核心数据中还是作为文件?,core-data,ios,blob,Core Data,Ios,Blob,我有一组包含图像的数据。我想缓存这些数据。我应该将它们存储在文件系统还是核心数据上?为什么?有两个主要选项: 将文件存储在磁盘上,然后将映像的路径存储在核心数据中 将图像的二进制数据存储在核心数据中 我个人更喜欢第一个选项,因为它允许我选择何时在内存中加载实际图像。这也意味着我不必记住原始数据的格式;我可以使用alloc/init路径创建一个新的UIImage对象。您可能需要阅读《核心数据编程指南》,了解如何处理二进制大对象(BLOB)。对于二进制数据应该和不应该存储在实际核心数据存储中的大小,

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

有两个主要选项:

  • 将文件存储在磁盘上,然后将映像的路径存储在核心数据中
  • 将图像的二进制数据存储在核心数据中
  • 我个人更喜欢第一个选项,因为它允许我选择何时在内存中加载实际图像。这也意味着我不必记住原始数据的格式;我可以使用
    alloc
    /
    init
    路径创建一个新的
    UIImage
    对象。

    您可能需要阅读《核心数据编程指南》,了解如何处理二进制大对象(BLOB)。对于二进制数据应该和不应该存储在实际核心数据存储中的大小,有经验法则

    你也可以看看


    如果您确实将二进制数据放在核心数据存储中,那么最好有一个保存实际数据的“数据”实体,并将“图像”实体分开。在两个实体之间创建一个关系,这样“数据”只需要在实际需要时加载。“图像”实体可以保存元数据,如标题、数据类型等。

    关于用户数据/文件的存储位置(我找到了“应用程序支持”考虑到我担心用户以某种方式移动、删除或更改文件会导致图像无法恢复并在以后由我的应用程序使用,因此我认为这是一个不错的位置)

    以minecraft为例: 例如“~/Library/Application Support/minecraft/saves/”


    我同意前面的评论,并在core data中存储图像路径,但在core data之外,将图像本身作为png文件存储在自己的文件夹中

    那么你的意思是说,如果我将图像作为二进制数据存储在核心数据中,我需要知道原始文件格式,同时恢复它。将数据存储在核心数据中还有其他缺点吗?@Abhinav正确;我要说的另一件事是,通过将映像与核心数据隔离,您可以使存储文件保持较小。这是否是一个缺点将由大量的性能分析来回答。:)@阿比纳夫,我认为可能;您可能希望通过使用仪器等进行分析来确认这一怀疑。Marcus Zarra建议将小图像直接保存在核心数据存储中,将大图像保存到磁盘中&以中等大小将它们保存到专用表中。他继续建议使用其中的两种技术来覆盖图像大小的扩展。看到您的核心数据越大,在进行核心数据迁移时遇到问题的可能性就越大。即使是核心数据中的小图像,如果有足够的图像,也会使其膨胀。出于这个原因,我更喜欢将图像保存在磁盘上。这些不是无法克服的问题,但它们是额外的麻烦。+1关于存储数据的单独实体的好主意。:)