繁体   English   中英

在iPhone Core Data或SQLite中存储长期数据的最佳方法是什么?

[英]What is best way to store long term data in iPhone Core Data or SQLite?

我正在开发定位于3.1.3和更高版本SDK的iPhone应用程序。 我想知道在不损失性能,一致性和安全性的情况下在iphone上存储用户长期数据的最佳方法。

我知道我可以使用Core Data,PList和SQL-Lite以自定义格式存储用户特定的数据。但是,我想知道在不损害应用性能和可伸缩性的情况下使用哪种是好的。

这取决于。 术语“用户数据”涵盖了大小,复杂性和用途的广泛范围,每个方面都有不同的最佳存储策略。

(1)如果大小和复杂度较低,并且使用主要是控制应用程序本身,请使用NSUserDefaults将数据存储在用户默认值中。

(2)如果大小较小并且可以通过数组,字典等管理复杂性,则将其存储在plist中。 大小很重要,因为存储在plist中的所有数据都以一个块的形式加载到内存中。

(3)如果大小很大,但是复杂度很低,例如,大量模板记录,例如索引卡系统,则使用直接SQL。 SQL在大型数据库中查找和保存简单且重复的信息的速度更快。

(4)如果复杂度很高,则无论大小如何都使用Core Data。 核心数据专门用于管理复杂信息。 如果大小较小,请使用xml存储。 如果很大,请使用SQL存储。

随着我对Core Data的熟悉,我发现除了用户默认值之外,几乎所有东西都使用它。 它具有陡峭的学习曲线,但是一旦掌握了它,您将拥有一个功能强大且易于使用的工具来管理应用程序数据。 我可能会在它不是最佳的情况下使用它,因为它会加快开发时间。

我不得不不同意TechZen的名单。 如果要处理旧版SQLite数据库,则数字3仅是一个正确的答案。 从来没有理由选择原始sqlite而不是Core Data。 核心数据在几乎每种情况下都将表现更好,并且将使您必须编写的代码量大大减少。

另外,我会警告不要使用塑料夹。 它们的读写成本很高,并且在几乎每种情况下,Core Data数据库都将胜过它们。

至于使用Core Data,除非在最极端的情况下,否则应始终使用SQLite后端(iOS上不提供XML)。

简而言之,如果要保存单个值,请将其存储在NSUserDefaults

否则,请使用核心数据。

更新资料

目前,使用Core Data不能比目前的原始SQLite拥有更出色的功能。 这就是在成千上万的行中更新单个列的值的能力。 那是因为修改一行,Core Data将该行加载到内存中,然后再次写回。

对于其他每种情况,与编写自己的访问器,对象以及处理其内存和生命周期相比,使用核心数据将获得更好的性能。

核心数据将胜过您将要编写的任何数据访问器,并且它将以比您更好的方式处理对基础文件的写入和读取。 为什么要重新发明轮子?

暂无
暂无

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

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