我正在开发针对3.1.3及更高版本SDK的iPhone应用。我想知道在iphone上存储用户长期数据的最佳方法,而不会失去性能,一致性和安全性。
我知道,我可以使用Core Data,PList和SQL-Lite以自定义格式存储用户特定数据。但是,想要知道哪一个好用,而不会在不久的将来影响应用程序性能和可伸缩性。
答案 0 :(得分:8)
这取决于。术语“用户数据”涵盖了广泛的规模,复杂性和使用范围,每个都有不同的最佳存储策略。
(1)如果大小和复杂性很低且用法主要是控制应用程序本身,请使用NSUserDefaults将数据存储在用户默认值中。
(2)如果大小很小并且复杂性可以通过数组来管理,那么字典等就会存储在plist中。大小计数是因为存储在plist中的所有数据都在一个块中加载到内存中。
(3)如果尺寸非常大但复杂性很低,例如大量的模板记录,如索引卡系统,然后使用直接SQL。 SQL可以更快地在非常大的数据库中查找和保存简单和重复的信息。
(4)如果复杂性非常高,无论大小如何,都要使用Core Data。核心数据专门用于管理复杂信息。如果大小很小,请使用xml存储。如果它很大,请使用SQL存储。
随着我对Core Data的熟悉,我发现自己几乎用于除用户默认之外的所有内容。它具有陡峭的学习曲线,但是一旦掌握了它,您就拥有了一个功能强大且易于使用的工具来管理应用程序数据。我可能在它不是最佳的情况下使用它只是因为它加快了开发时间。
答案 1 :(得分:3)
我不得不在TechZen的名单上表示不同意见。如果您正在处理旧的SQLite数据库,则3号只是一个正确的答案。没有理由选择原始sqlite而不是Core Data。核心数据几乎在所有情况下都会表现更好,并且会减少您必须编写的大量代码量。
此外,我会警告不要使用plist。它们的读写成本很高,而且几乎在所有情况下,核心数据数据库的性能都会超过它们。
至于使用Core Data,除非在最极端的情况下,否则应始终使用SQLite后端(iOS上不提供XML)。
简而言之,如果您要保存单个值,请将其存储在NSUserDefaults
。
否则使用核心数据。
目前有一个单独的事情是Core Data无法比原始SQLite更高效。这就是能够在数万行中更新单个列的值。这是因为要修改行,Core Data会将该行加载到内存中,然后再将其写回。
对于其他所有情况,使用Core Data可以获得比编写自己的访问器,对象以及处理内存和生命周期更好的性能。
核心数据将胜过您自己编写的任何数据访问器,它将以比您更好的方式处理对底层文件的写入和读取。为什么重新发明轮子?