我认为这已经涵盖了,但我的搜索没有返回任何相关性。
我知道有 NSUserDefaults、Core Data、对象归档、原始 SQLite、plist,当然还有 Web 服务器的存储。对于初学者来说,不清楚且有些模糊的是何时使用这些不同的工具。
Web 服务器与 Core Data 的用法很明显,但是 NSUserDefaults 与 plists 呢?核心数据与对象归档?一个简单的用例分解真的可以帮助我理解为什么 iOS 中有这么多的存储选项。
我认为这已经涵盖了,但我的搜索没有返回任何相关性。
我知道有 NSUserDefaults、Core Data、对象归档、原始 SQLite、plist,当然还有 Web 服务器的存储。对于初学者来说,不清楚且有些模糊的是何时使用这些不同的工具。
Web 服务器与 Core Data 的用法很明显,但是 NSUserDefaults 与 plists 呢?核心数据与对象归档?一个简单的用例分解真的可以帮助我理解为什么 iOS 中有这么多的存储选项。
我尝试编写一个快速简单的常见用例列表,因为正如@rmaddy 所说,这个答案可以填满一本书的章节:
NSUserDefaults
:存储简单的用户偏好,没有太复杂或安全的东西。如果您的应用程序有一个带有几个开关的设置页面,您可以在此处保存数据。
Keychain
(请参阅SSKeychain以获得出色的包装):用于存储敏感数据,例如凭据。
PLists
:用于存储较大的结构化数据(但不是很大):它是一种非常灵活的格式,可以在大量场景中使用。一些例子是:
Object archiving
对于序列化更复杂的对象(可能充满二进制数据)可能很有用,这些对象不能(或您不想)映射到更简单的结构(如 plist)上。
Core Data
功能强大,可以由不同的持久存储支持(SQLite 只是其中之一,但您也可以选择 XML 文件,甚至可以编写自己的格式!),并给出元素之间的关系。它很复杂,并提供了许多对开发有用的特性,如 KVO 和上下文。您应该将它用于包含许多相关记录的大型数据集,这些记录可能是用户生成的或由服务器提供的。
Raw SQLite
当您需要非常非常快速地访问关系数据源(Core Data 引入了一些开销),或者如果您需要跨多个平台支持相同的 SQLite 格式(您永远不应该弄乱 CoreData 内部 SQLite:它使用自己的格式,因此您不能只在 CoreData 中“导入”现有的 SQLite)。例如,对于我工作的一个项目,Web 服务为我提供了一些大型 SQLite,而不是 jsons 或 xmls:其中一些 SQLite 被导入到 CoreData(操作可能需要一段时间,具体取决于源大小),因为我需要所有它的功能,而直接读取其他 SQLite 以实现非常快速的访问。
Webserver storage
好吧,这应该很明显:如果您需要将数据存储到服务器,那是因为设备不应该是该数据的唯一所有者。但是,如果您只需要在不同的 iOS 设备(甚至是 Mac 移植版本的应用程序)上同步同一个应用程序,您显然也可以查看 iCloud 存储。