繁体   English   中英

我应该保存plist或Core Data吗?

[英]Should I save in plist or Core Data?

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

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

只是一些可以帮助您的应用程序设计的建议。

首先,强调要强调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上)。

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

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

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

希望这可以帮助。 再见!

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

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

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

Coredata在Apple中得到了很好的记录,因此您可以找到入门所需的一切以及更多内容。 有一些例子,示例项目,视频,你给它命名 - 所以我肯定会建议你看看如果你对性能,可扩展性和有点乐趣感兴趣:)

正如已经指出的那样,使用NSDictionary写入plist并从plist中读取几乎是微不足道的。 这可能是一个很好的开始方式。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM