使用核心数据存储/缓存非标准数据类型

时间:2011-02-18 14:16:14

标签: iphone cocoa ios core-data

我正在重新设计在iphone上存储非标准类型(string,int16等)的最佳方法。 我最终将要做的是下载一个xml文件并存储诸如日期,标题,名称,mediaurl等值。我刚刚发现了coredata数据模型,我相信它可以很好地存储这些数据,所以我不必在下次应用程序启动时下载xml。

我不确定的是我可以在实体中存储的限制(如果有的话)。例如,其中一个xml元素会将一个url保存到一小段音频(小于1mb)和一个url到一个图像。是否适合存储音频数据,图像作为实体中的属性,还是应保存为字符串和整数等,而非标准类型存储在其他地方?

我想我真正要问的是,数据模型是否适合缓存?

最终我所寻求的是一种解决方案,用于将设备上的数据存储在一个与任何一个视图无关的位置,有点原子模型,包含我需要的所有内容,无论我是什么,我都可以英寸

2 个答案:

答案 0 :(得分:1)

数据模型适用于缓存,但由于您没有对缓存的显式控制(您可以对数据对象进行故障但它可能保留在内存中),因此建议将非常大的二进制对象分开。将它们作为资源存储在文件系统中,并在Core Data中管理它们的链接(URL或路径)。

< 1MB文件似乎可以由Core Data处理,但它也取决于您的应用程序使用了多少文件。

此外,如果您在Core Data中存储大型文件,则应使用SQLite存储。

答案 1 :(得分:1)

MHC的上述答案很好,但如果您要存储不需要编制索引的大型二进制对象(无论如何都无法在SQLite中完成),建议的方法是将实际数据存储在某处在文件系统上(例如,在NSDocumentsDirectory中),并存储Core Data实体内文件的路径。

Core Data将获取对象的所有部分加载到内存中,对于具有二进制数据的实体的几个实例,这可能很快导致iOS设备上的内存不足。

如果它存储在文件系统中,您可以在需要时延迟加载数据。