0

我正在开发针对 3.1.3 及更高版本 SDK 的 iPhone 应用程序。我想知道在不损失性能、一致性和安全性的情况下将用户的长期数据存储在 iPhone 上的最佳方式。

我知道,我可以使用 Core Data、PList 和 SQL-Lite 来以自定义格式存储用户特定的数据。但是,我想知道在不久的将来,在不影响应用程序性能和可扩展性的情况下,哪个更好用。

4

2 回答 2

8

这取决于。术语“用户数据”涵盖了广泛的规模、复杂性和使用情况,每个都有不同的最佳存储策略。

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

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

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

(4)如果复杂度很高,不管大小都使用Core Data。Core Data 专为管理复杂信息而设计。如果大小很小,请使用 xml 存储。如果它很大,请使用 SQL 存储。

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

于 2010-06-14T14:08:38.853 回答
3

我不得不不同意 TechZen 的清单。只有在处理旧版 SQLite 数据库时,数字 3 才是正确答案。没有理由选择原始 sqlite 而不是 Core Data。Core Data 在几乎所有情况下都会表现得更好,并且会大大减少你必须编写的代码量。

此外,我会告诫不要使用 plist。它们的读写成本很高,Core Data 数据库几乎在所有情况下都会胜过它们。

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

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

否则使用核心数据。

更新

目前,Core Data 的性能比原始 SQLite 更高,有一件事情是无法完成的。这就是在数万行中更新单个列的值的能力。这是因为要修改一行,Core Data 将该行加载到内存中,然后再次将其写回。

对于其他所有情况,您将使用 Core Data 获得比您编写自己的访问器、对象以及处理其内存和生命周期更好的性能。

Core Data 将优于您自己编写的任何数据访问器,并且它将以比您更好的方式处理对底层文件的写入和读取。为什么要重新发明轮子?

于 2010-06-14T20:16:57.477 回答