数据持久化的方案

本文来自: https://casatwy.com/iosying-yong-jia-gou-tan-ben-di-chi-jiu-hua-fang-an-ji-dong-tai-bu-shu.html

1 NSUserDefault

一般来说,小规模数据,弱业务相关数据,都可以放到NSUserDefault里面,内容比较多的数据,强业务相关的数据就不太适合NSUserDefault了。

2 keychain

KeyChain 是苹果提供的带有可逆加密的存储机制,普遍用在各种存密码的需求上。另外,由于App卸载只要系统不重装,KeyChain中的数据依旧能够的到保留,依旧可被iCloud同步特性,大家都会在这里存储用户唯一标识串。所有有需要加密,需要存储iCloud的敏感小数据,一般都会放在Keychain。

3 文件存储

文件存储包括了Plist,archive,Stream等方式。一般结构化的数据或者需要方便查询的数据,都会以Plist的方式去持久化。Archive方式适合存储平时不太经常使用但很大量的数据,或者读取之后希望直接对对象的数据,因为Archive会将对数据及其对象关系序列化,以至于读取数据的时候需要Decode很花时间,Decode的过程是解压,也可以是序列化,这个可以根据具体中的实现来决定。Stream就是一般的文件存储了。一般用来存存图片啥的。适用于经常使用,然而数据量又不算非常大的那种。

4 数据库存储

数据库存储,样式就比较多了。苹果自带了一个CoreData,当然业界也有无数代替可选的方案,不过真正用在iOS领域的除了CoreData外,就是FMDB比较多了。数据库方案主要是为了便于增删改查,当数据有状态和类别的时候最好还是采用数据库方案比较好,而且尤其是这些状态和类别都是强业务相关的时候,就更加采用数据库方案了。
因为你不可能通过文件系统遍历文件去甄别你需要获取某个状态或类别的数据,这么做成本太大了。当然,特别大量的数据也不合适直接存储数据库,比如图片或者文章这样的数据,一般来说,都是数据库存一个文件名,然后这个文件名指向的是某个图片或者文章的文件。如果真的要做全文索引这种需求,建议最好还是挂个API丢到服务端去做。

0%