【发布时间】:2011-06-25 06:21:29
【问题描述】:
我想知道是否应该将应用中的数据保存到 plist 或使用 Core Data..
我的应用现在基本上只是保存时间线和其他用户的推文。这不到几百 kB(在我的测试中约为 200 kb)。使用核心数据有什么好处?
【问题讨论】:
标签: iphone cocoa-touch core-data plist
我想知道是否应该将应用中的数据保存到 plist 或使用 Core Data..
我的应用现在基本上只是保存时间线和其他用户的推文。这不到几百 kB(在我的测试中约为 200 kb)。使用核心数据有什么好处?
【问题讨论】:
标签: iphone cocoa-touch core-data plist
只是一些有助于您的应用设计的建议。
首先要强调 CoreData 不能与 plist 真正相提并论。我的意思是,CoreData 就像数据存储上的数据模型抽象层,允许您管理不同数据实体之间的关系和获取规则。在 CoreData 层之后,您的数据存储可以基于 plist(仅限 osx)、sqlite 数据库或二进制对象。
这也很重要,因为它可以帮助您了解 CoreData 的范围:如果您需要保持不同数据实体之间的逻辑关系或对同一数据执行多个查询或序列化/反序列化大数据结构,CoreData 提供了最好和最快的实现它的解决方案。如果您只需要存储只需要显示的项目的简单列表,则 plist 文件的反弹应该足够了。
另一个重要的决定点是您需要存储的数据类型:根据 Apple 的说法,plist 文件针对字符串、数字、日期和一些二进制数据进行了优化。这就是 Apple 对 plist 的评价:
请注意,属性列表应该用于主要包含 字符串和数字。与大块一起使用时效率非常低 二进制数据。
许多应用程序需要一种存储信息的机制 以后需要。适用于需要存储小容量的情况 大量持久数据——比如说少于几百千字节——属性 列表提供了一种统一且方便的组织、存储和 访问数据。
这意味着如果您需要存储“重”的东西或复杂的对象并管理它们(例如通过它们进行搜索),plist 解析器的缓存系统可能效率低下(主要在 iOS 上)。
在我看来,您从时间线存储大约 20 万条线性推文(大约 1000 条推文?)的想法适用于基于 plist 的解决方案。还要考虑 plist 解析器通过小数据结构得到强烈加速,那么您将获得更好的性能和更低的内存使用量(主要在启动期间),因为您不需要初始化 CoreData 或围绕数据存储的任何其他“代码包装器”。只是NSDictionary、NSArray 等的简单即时使用。
最后但同样重要的是,plist 实现足够便宜,可以让您在下一步继续使用 CoreData。
我的意思是,如果你需要捕捉一些苍蝇,有时不需要使用坦克:-)
希望这会有所帮助。 咻!
【讨论】:
除了保存简单的首选项和真正的基本数据结构之外,我不会考虑使用 plist。此外,在性能方面,检索数据并将数据保存到 plist 可能会非常缓慢。
在与 Coredata 斗争了很长时间之后,现在我终于得到了它,我会选择它而不是任何一天。是的,它确实有一些陡峭的学习曲线,但是你可以“免费”获得很多东西,我肯定会花时间学习和探索它。
Coredata 将让您根据需要灵活地扩展对象模型,根据某些参数轻松地从持久存储中获取对象,创建模型之间的关系、内存管理等等。
Coredata 由 Apple 提供了详细的文档记录,因此您将找到入门所需的一切以及更多内容。有示例、示例项目、视频,随你的便 - 所以如果你对性能、可扩展性和乐趣感兴趣,我绝对建议你看看 :)
【讨论】:
如前所述,使用 NSDictionary 写入 plist 和读取 plist 几乎是微不足道的。所以这可能是一个很好的开始。
也就是说,如果您的数据模型开始变得更加丰富,具有额外的属性和关系,那么 Core Data 将提供更好的扩展和更好的支持。 Xcode 使设计您的对象模型(模式)变得非常容易 - 如果您决定子类化 NSManagedObject(我几乎总是这样做),甚至会生成源文件。
底线:Plist 将使您更快地启动和运行;时机成熟时,Core Data 将为您提供强大的功能。
【讨论】: