iPhone - 存储数据的不同方式,优点和缺点

时间:2011-04-26 01:31:30

标签: iphone xml core-data save plist

你能解释一下在iPhone上存储数据的不同方法,以及每种方式,这都是优点和缺点。

我读过很多关于UserDefaults,CoreData,XML,plist等的内容,而且我有点迷失。

目前,我理解:

  • UserDefault适用于首选项,即使可以完成,也不适用于任何其他内容(小数据量)。它生成一个plist文件,可以在以后轻松地人工读取/检查到XCode。

  • XML适用于结构化文本,但不适用于二进制数据。它很容易编写,但不能读取。它生成一个XML文件,可以在以后轻松地人工读取/检查到XCode。

  • CoreData功能强大,可以保存任何大小的内容,但包含的内容有点难/长。人文阅读已经写好的coredatas是“硬”(可能吗?)

2 个答案:

答案 0 :(得分:3)

SQLite DB - 数据库在iOS开发中使用,您可以根据自己的喜好直接与此进行交互(例如,您希望使用SQL语句)。

CoreData - 对SQLite DB的抽象,以便您可以删除SQL语句并使用API​​。这样做的好处是它与Cocoa API的兼容性。在我们的生产应用程序中,我们使用CoreData而不是SQLite。

文件系统 - 您可以直接在此处存储文件并使用约定。您可能还想了解如何使用缓存文件夹iOS开发来获取临时数据。

XML - 不确定情况。在商业应用中,我们只使用XML来连接系统。例如。 iPad到云服务器。

UserDefault - 仅适用于参数

答案 1 :(得分:2)

如果要在文件系统上管理自己的存储,则Plist文件是另一种选择。 NSArray和NSDictionary提供了在plist文件中写入和读取这些集合的方法,只要您可以将所有数据存储在一个受支持的plist数据类型中。有关详细信息,请参阅Property List Programming Guide。如果您可以轻松地将数据分解为不同的文件并且总是希望一次加载整个文件,那么这可能是一个不错的选择。

CoreData是一个功能强大的工具,特别是如果您想存储对象图形。当您希望能够轻松存储和加载模型对象时,它可能是一个合适的选择。

如果要存储关系数据并对其运行查询,SQLite非常有用。如果您想要快速有效的查询但不需要将结果转换为模型对象(或者有一些编写自己的ORM层的原因),这可能是一个不错的选择。

正如您所提到的,NSUserDefaults是一种用于存储用户凭据的便捷工具,但不适用于大量数据。它还允许您在设置应用程序中公开设置,以便用户可以在一个公共位置设置应用程序行为,而无需启动您的应用程序。

如果要通过“文件共享”设置向用户公开这些文件,任何形式的基于文件的存储都可能具有附加值,从而允许应用程序数据在同步到PC时显示在iTunes文档目录中。


无论您使用哪种存储机制,都需要为数据管理某种架构。

您需要跟踪每个版本的应用程序中存储数据的格式。只要您改变对保存数据格式的期望,就需要支持旧版本。我发现更新后有太多应用程序崩溃,因为它们不处理旧版本应用程序保存的数据,或者假设用户已安装并运行应用程序的每个版本而不是跳过某些更新。

CoreData支持将数据从一个模式迁移到另一个模式,但在所有情况下都需要开发人员的工作,意识和测试。