【问题标题】:Storing images in Core Data or as file?将图像存储在 Core Data 中还是作为文件?
【发布时间】:2011-05-08 16:21:06
【问题描述】:

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

【问题讨论】:

    标签: core-data ios blob


    【解决方案1】:

    有两个主要选项:

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

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

    【讨论】:

    • 所以你的意思是说如果我将图像作为二进制数据存储在Core data中,我需要在恢复时知道原始文件格式。在 Core Data 中存储数据还有其他缺点吗?
    • @Abhinav 正确;我要说的另一件事是,通过将图像排除在 Core Data 之外,您可以使存储文件保持较小。这是否是一个缺点将通过大量的性能分析来回答。 :)
    • @Abhinav 我认为它可能;您想通过使用 Instruments 等进行分析来确认这种怀疑。
    • Marcus Zarra 建议将小图像直接保存在 Core Data 存储中,将大图像保存到磁盘并以中等大小将它们保存到专用表中。他继续建议使用其中两种技术来覆盖各种图像尺寸。见cimgf.com/2011/08/22/…
    • 您的核心数据越大,您在进行核心数据迁移时遇到问题的可能性就越大。如果你有足够多的核心数据,即使是核心数据中的小图像也会膨胀。出于这个原因,我更喜欢将图像保存在磁盘上。这些不是无法克服的问题,但它们是额外的麻烦。
    【解决方案2】:

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

    你也可以看看Core Data iPad/iPhone BLOBS vs File system for 20k PDFs

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

    【讨论】:

    • +1 关于存储数据的单独实体的好主意。 :)
    【解决方案3】:

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

    以我的世界为例: 例如。 "~/Library/Application Support/minecraft/saves/"

    我同意之前的 cmets 并将图像的路径存储在核心数据中,但将图像本身作为 png 文件存储在核心数据之外的自己的文件夹中。

    【讨论】:

      猜你喜欢
      • 2014-11-04
      • 2013-02-01
      • 2012-04-01
      • 2011-09-28
      • 2012-03-31
      • 1970-01-01
      • 2014-04-30
      • 2023-03-04
      相关资源
      最近更新 更多