什么时候应该使用iOS中的各种存储机制?(When should I use the various

2019-09-02 02:42发布

我认为这将是已经覆盖了,但我的搜索返回任何相关性。

据我所知,有NSUserDefaults的是,核心数据,对象归档,原始的SQLite,Plist档案,当然,由Web服务器存储。 什么是不清楚的,有点朦胧的初学者是当采用每一种不同的工具。

Web服务器VS核心数据的用途是显而易见的,但对于VS NSUserDefaults的Plist档案? 核心数据VS对象归档? 使用案例的简单故障将真正帮助我理解了为什么有用于存储iOS中这么多的选择。

Answer 1:

我尝试写的常见使用情况的快速和简单的列表,因为@rmaddy说,这个答案可以写成一本书章节:

  • NSUserDefaults :存储提供简单的用户喜好,没有什么太复杂或安全。 如果你的应用程序有几个开关的设置页面,你可以在这里保存数据。

  • Keychain (见SSKeychain为一个伟大包装):用来存储敏感数据,如凭证。

  • PLists :用来存放更大的结构化数据(但不是很大):这是一个非常灵活的格式,可以在场景中大量使用。 一些例子是:

    • 用户生成的内容存储:的GeoPoint的简单列表将由地图或列表中。
    • 提供简单的初始数据应用:在这种情况下的plist将被包含在一个NSBundle,而不是由用户产生,并通过用户数据填满。
    • 分离需要从其他数据应用程序的特定模块的数据。 例如,该数据需要建立一个步骤一步启动教程,其中每个步骤是类似的,但其他人仅需要不同的数据。 硬编码这个数据很容易填满你的代码,所以你可能是一个更好的开发和使用的Plist来存储数据,而是从中读出。
    • 你正在编写一个库或框架,可以以某种方式使用它的开发者进行配置。
  • Object archiving可序列化更复杂的对象,也许是全二进制数据是有用的,不能(或者你不想)像的Plist简单的结构进行映射。

  • Core Data是强大的,可以通过不同的持久存储备份(SQLite是只是其中之一,但你也可以选择XML文件或者你甚至可以编写自己的格式!),并给出了元素之间的关系。 它是复杂的,并为发展提供有益的许多功能,如志愿和背景。 你应该使用它的大数据集的许多相关的记录,这可能是用户生成或由服务器提供的。

  • Raw SQLite ,当你真的需要,对关系数据源真快访问是有益的(核心数据引入了一些开销),或者如果你需要支持跨多个平台相同的SQLite的格式(你永远不应该惹CoreData内SQLite的:它使用它自己的格式,所以你不能只是“舶来品”,在CoreData现有的SQLite)。 例如,对于一个项目,我工作了,web服务为我提供了一些大的SQLite,而不是jsons或个XML:一些这方面的SQLite是进口到CoreData(可能需要一段时间,这取决于源大小操作),因为我需要所有它的功能,而其他SQLites是一个真正快速访问直接读取。

  • Webserver storage以及它应该是显而易见的:如果你需要将数据存储到服务器是因为该设备不应该是数据的唯一所有者。 但如果你只是需要将相同的应用程序在不同的iOS设备同步(或者甚至与应用程序与Mac移植版),你也可以看的iCloud存储,效果显着。



文章来源: When should I use the various storage mechanisms in iOS?