我什么时候应该使用iOS中的各种存储机制?

use*_*ser 9 persistence core-data plist nsuserdefaults ios

我认为这已经涵盖了,但我的搜索没有任何相关性.

我知道有NSUserDefaults,核心数据,对象归档,原始SQLite,plist,当然还有Web服务器的存储.对于初学者来说,不清楚和有些模糊的是何时使用这些各种工具.

Web服务器与核心数据的使用是显而易见的,但是NSUserDefaults和plists呢?核心数据与对象归档?用例的简单分解将真正帮助我理解为什么在iOS中有如此多的存储选项.

Ale*_*rrù 11

我尝试编写一个快速简单的常见用例列表,因为正如@rmaddy所说,这个答案可以填写一个书章:

  • NSUserDefaults:存储简单的用户首选项,没有太复杂或安全.如果您的应用具有包含几个开关的设置页面,则可以在此处保存数据.

  • Keychain(请参阅SSKeychain以获得更好的包装):用于存储敏感数据,如凭据.

  • PLists:用于存储较大的结构化数据(但不是很大):它是一种非常灵活的格式,可以在很多场景中使用.一些例子是:

    • 用户生成的内容存储:一个简单的Geopoint列表,将由地图或列表显示.
    • 为您的应用提供简单的初始数据:在这种情况下,plist将包含在NSBundle中,而不是由用户生成并由用户数据填充.
    • 将应用程序的特定模块所需的数据与其他数据分开.例如,构建逐步启动教程所需的数据,其中每个步骤与其他步骤类似,但只需要不同的数据.对这些数据进行硬编码可以轻松填充代码,因此您可以成为更好的开发人员,并使用plist来存储数据并从中读取数据.
    • 您正在编写可以由使用它的开发人员以某种方式配置的库或框架.
  • Object archiving 可能有用的序列化更复杂的对象,可能是二进制数据,不能(或你不想)被映射到更简单的结构,如plists.

  • Core Data功能强大,可以由不同的持久存储支持(SQLite只是其中之一,但您也可以选择XML文件,或者您甚至可以编写自己的格式!),并提供元素之间的关系.它很复杂,并提供许多对开发有用的功能,如KVO和上下文.您应该将它用于许多相关记录的大型数据集,这些记录可以由用户生成或由服务器提供.

  • Raw SQLite当您需要真正,非常快速地访问关系数据源(Core Data引入一些开销),或者如果您需要跨多个平台支持相同的SQLite格式时(您应该永远不要使用CoreData内部SQLite):它使用自己的格式,所以你不能只是"导入"CoreData中的现有SQLite).例如,对于我工作的项目,webservice为我提供了一些大型SQLite而不是jsons或xmls:这些SQLite中的一些被导入到CoreData(操作可能需要一段时间,具体取决于源大小),因为我需要所有它的功能,而其他SQLite直接读取,以实现快速访问.

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