我应该保存plist或Core Data吗?

时间:2011-02-11 00:36:17

标签: iphone cocoa-touch core-data plist

我想知道是否应该将我的应用中的数据保存到plist或使用Core Data ..

我的应用程序基本上是从时间线和其他用户现在保存推文。这不到几个hunderd kB(在我的测试中大约200 kb)。使用核心数据有什么好处?

3 个答案:

答案 0 :(得分:40)

只是一些有助于您的应用设计的建议。

首先,强调要强调CoreData与plist不太匹配。我的意思是CoreData就像数据存储上的数据模型抽象层,允许您管理不同数据实体之间的关系和获取规则。在CoreData层后面,您的数据存储可以基于plist(仅限osx),sqlite数据库或二进制对象。

这也很重要,因为可以帮助您了解CoreData的范围:如果您需要保持不同数据实体之间的逻辑关系,或者对同一数据执行多个查询或序列化/反序列化大数据结构,CoreData提供最好和最快的实现它的解决方案。如果您只需要存储一个只需要显示的项目的简单列表,那么plist文件的反弹就足够了。

另一个重要决策点是您需要存储的数据类型:根据Apple的说法,plist文件针对字符串,数字,日期和一些二进制数据进行了优化。这就是Apple对plist所说的话:

Note that property lists should be used for data that consists primarily 
of strings and numbers. They are very inefficient when used with large blocks 
of binary data.
Many applications require a mechanism for storing information that will 
be needed at a later time. For situations where you need to store small 
amounts of persistent data — say less than a few hundred kilobytes — property 
lists offer a uniform and convenient means of organizing, storing, and 
accessing the data.

这意味着如果你需要存储“重”的东西或复杂的对象并对它们进行管理(比如搜索它们),那么plist解析器的缓存系统可能效率低下(主要是在iOS上)。

在我看来,你想从时间线存储大约20万条线性推文(大约1000条推文?)的想法可以使用基于plist的解决方案。还要考虑使用小数据结构强大加速plist解析器,然后您将获得更好的性能和低内存使用率(主要是在启动期间),因为您不需要初始化CoreData,也不需要在数据存储周围初始化任何其他“代码包装器”。只需动态使用NSDictionaryNSArray等即可。

最后但并非最不重要的是,plist实现足够便宜,可以让您在下一步中继续使用CoreData。

我的意思是,如果你需要捕捉一些苍蝇,有时候没有必要使用水箱: - )

希望这会有所帮助。 侨!

答案 1 :(得分:22)

除了保存简单首选项和真正基本的数据结构之外,我不会考虑使用plist。另外,性能方面,检索数据并将数据保存到plists可能会非常慢。

在与Coredata挣扎很长一段时间之后,现在我终于明白了,我会在任何一天选择它。是的,它确实有一个陡峭的学习曲线,但有很多你用“免费”得到它,我肯定会花时间学习和探索它。

Coredata将为您提供根据需要扩展对象模型的灵活性,可以根据特定参数轻松从持久存储中获取对象,在模型之间创建关系,内存管理和列表继续。

Coredata非常适合Apple记录,因此您可以找到入门所需的一切以及更多内容。有一些例子,示例项目,视频,你给它命名 - 所以我绝对建议你看一下如果你对性能,可扩展性以及有一点乐趣感兴趣:)

答案 2 :(得分:14)

如前所述,使用NSDictionary写入plist并从plist中读取几乎是微不足道的。所以这可能是一个很好的开始方式。

也就是说,如果您的数据模型开始变得更加富有额外的属性和关系,那么Core Data将提供更好的扩展和更好的支持。 Xcode使您可以非常轻松地设计对象模型(模式) - 甚至可以生成源文件,如果您决定继承NSManagedObject(我几乎总是这样做)。

底线:Plist可以帮助您提高运行速度;核心数据将在时机成熟时为您提供强大的功能。