我认为这已经涵盖了,但我的搜索没有任何相关性。
我知道有NSUserDefaults,核心数据,对象存档,原始SQLite,plist,当然还有Web服务器存储。对于初学者来说,不清楚和有些模糊的是何时使用这些各种工具。
Web服务器与核心数据的使用是显而易见的,但是NSUserDefaults和plist呢? 核心数据与对象归档?一个简单的用例细分将真正帮助我理解为什么在iOS中存储有这么多选项。
答案 0 :(得分:9)
我尝试编写一个快速而简单的常见用例列表,因为正如@rmaddy所说,这个答案可能会填满一个章节:
NSUserDefaults
:存储简单的用户首选项,不会太复杂或安全。如果您的应用具有包含几个开关的设置页面,则可以在此处保存数据。
Keychain
(请参阅SSKeychain了解一个很好的包装器):用于存储敏感数据,如凭据。
PLists
:用于存储较大的结构化数据(但不是很大):它是一种非常灵活的格式,可以在很多场景中使用。一些例子是:
Object archiving
可用于序列化更复杂的对象,可能包含二进制数据,但不能(或者您不希望)将其映射到更简单的结构(如plist)上。
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存储。