将图像存储在核心数据中或作为文件?

问题描述:

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

主要有两种选择:

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

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

+0

所以你的意思是说如果我将图像作为二进制数据存储在核心数据中,我需要在恢复它时了解原始文件格式。在Core Data中存储数据是否有其他缺点? – Abhinav 2010-11-11 20:48:38

+1

@Abhinav正确;另一件事我会说,通过保持核心数据的形象,你保持你的商店文件小。这是否是一个缺点可以通过大量的性能分析来解决。 :) – 2010-11-11 21:13:33

+0

因此,这意味着将较重的图像文件放在Core Data的外面会提高应用程序的性能。我理解正确吗? – Abhinav 2010-11-11 22:00:07

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

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

如果核心数据存储中做的地方二进制数据,你会做得很好具有保存实际数据的“数据”的实体,有你的“图像”实体分开。在两个实体之间创建一个关系,以便只在实际需要时才加载“数据”。 “图像”实体可以保存元数据,如标题,数据类型等。

+7

+1关于存储数据的单独实体的好主意。 :) – 2010-11-11 21:14:09

关于在哪里存储用户数据/文件(我发现“应用程序支持”是一个体面的位置,因为我对使用者移动,删除或改变文件有所警惕,这将导致图像无法恢复并在以后被我的应用程序使用)

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

我同意以前的评论和存储路径到核心数据中的图像,但除此之外将图像本身作为png文件存储在核心数据之外的文件夹中。