【问题标题】:Storing Images in file system vs. Core Data在文件系统中存储图像与核心数据
【发布时间】:2011-07-14 14:03:20
【问题描述】:

我目前正在开发一个 iOS 应用程序,我允许用户将照片库中的图像添加到应用程序中。我将这些图像存储在设备文件系统中,并在需要时访问它们(当它们在 UIScrollView 中时,我可以经常访问它们)

我只是想就这种方法获得一些意见。我应该继续使用文件系统方法,还是将这些 I 图像存储在 CoreData 中是否有益。

对此的任何建议将不胜感激。

谢谢。

【问题讨论】:

    标签: ios core-data uiimage storage


    【解决方案1】:

    我不认为 Core Data 真的是为存储这种类型的数据而设计的。这样做在道德上相当于将图像数据存储到 SQL/关系数据库中,这也不理想。

    我有类似的情况,我有一堆图像存储在硬目标位置(我的图像列表永远不会改变,所以我只是将它们全部包含在应用程序包中),核心数据存储包含大量关于图像。我在图像本身的核心数据中保留的只是文件名,然后在运行时将完整的文件路径混合在一起,最后是时候查看图像了。我没有任何延迟或延迟问题。

    即使我没有在 UIScrollView 中显示图像,我仍然认为您从核心数据存储中获取图像信息数组并在生成单元格时动态生成完整文件路径没有什么问题,因为这些只是字符串,生成 UIImage 的代码非常紧凑。或者生成相同的信息数组,然后在生成任何单元格之前编译图像路径数组,例如 UIScrollView 即将出现时。

    【讨论】:

      【解决方案2】:

      您应该使用文件系统方法处理比缩略图更大的任何内容。

      一方面,如果您存储在 Core Data 中,您必须存储它具有数据或可转换属性。在任何一种情况下,您都有一个额外的步骤来转换为图像。如果你存储一个文件,你可以直接使用 UIImage 来加载它。

      然而,主要问题是内存使用,错误的图像不会像 UIImage 那样从内存中清除。

      2012-9-20 更新:此答案现已过时。 Core Data 没有自己的系统,用于在外部文件中存储大量数据,例如图像。

      【讨论】:

      • 如何理解“错误图像不会像 UIImage 那样从内存中清除。”?
      • 我的缩略图大约是 20~40kb,但缩略图的数量可能有数千个,这取决于用户。我应该将照片保存到文件中吗?附言。所有照片都将上传到服务器。
      【解决方案3】:

      我认为将它们放入核心数据会很慢。文件系统会更快。

      【讨论】:

      • 我读过同样的东西,我只是想评估人们这样做的经验。在大多数情况下,我发现它很快,直到我添加了一堆图像,然后它变慢了,我必须重新启动应用程序才能恢复速度。我以为这是一个内存问题,但我没有看到任何泄漏(即使在仪器中),所以我必须更深入地挖掘。谢谢您的答复。我会保持开放一段时间,如果我有一段时间没有收到其他人的消息,我会将其标记为答案。
      猜你喜欢
      • 2014-05-04
      • 2012-06-26
      • 1970-01-01
      • 2013-05-04
      • 1970-01-01
      • 2011-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多