mirror of
https://github.com/NohamR/knowledge-kit.git
synced 2026-05-24 20:00:37 +00:00
2.9 KiB
2.9 KiB
数据持久化方案
功能
主要将一些网络获取下来的数据保存到 App 本地,增强用户体验、减小网络请求的次数。
| 方案 | 存储量 | 数据类型 | 数据载体 | 特点 | 场景 | 缺点 |
|---|---|---|---|---|---|---|
| plist | 适合存储小数据量、并且属于一类的列表类的数据 | 基本数据类型、不支持存储自定义的对象 | 直接在plist文件上操作(可见) | 量小、不常变动 | 省市列表、职场工作分类 | 所有数据都存放在 root dictionary 里,每次都需要将整个 dictiona 读取出来访问所需的对象。数据较大的时候很费时间和空间 |
| 归档 | 存储数据量较大的数据对象 | 遵循NSCoding、NSCopying协议的对象 | 必须依赖NSKeyedArchieve、NSUnKeyedArchieve的类方法或者对象方法进行存储 | 存储较为麻烦,需要实现对应的协议。归档需要实现-(void)encodeWithCoder:(NSCoder*)aCoder;解码需要实现-(id)initWithCoder:(NSCoder*)aDecoder;。除了遵循NSCoding协议外,对象要实现复制,需要实现-(id)copyWithZone:(NSZone *)zone; |
存储一些较小的数据 | 无法存储较大的数据和高效的查找 |
| NSUserDefault(偏好设置) | 适合存储数据量较少,有时也会存储一些比如状态开关的标准性值 | 存储OC所有的数据类型 | 实例对象、基本数据 | 利用 | App应用程序的配置信息、如版本号、app名称、用户权限、标志键值等 | 无法存储自定义的对象 |
| 沙盒存储 | 存储较大量数据量的数据 | 基本存储 NSData 类型的数据 | 文件 | 依赖NSFileManager进行文件的写入和读取,过程较为复杂。Application:存放程序源代码,上架前经过数字签名,上架后不可修改。Documents:保存App运行时生成的需要持久化的数据,iTunes同步设备会同步该目录。例如将游戏数据保存到该目录下。tmp:保存App运行时产生的临时数据,程序结束将文件从该目录删除。iTunes同步设备不会同步该目录。Library/Caches:保存应用运行时生成的需要持久化的数据,iTunes同步设备时不会同步该目录。一般体积大、不需要备份的非重要数据,比如网络数据的缓存。Library/Preference:保存应用的偏好设置,比如OS的设置应用会在该目录下查找用户的设置信息。iTunes同步设备会同步该目录 | 图片、音视频。比如SDWebImage的文件缓存 | 缓存太多,文件体积会非常大 |
| 数据库 | 存储大型数据量的数据 | OC所有的数据类型 | 数据库文件 | 数据的增删改查,较为强大的数据库批量处理指令,SQL | 几乎每个大型App都有自己的数据库,比如微信、微博,为了较好的用户体验在每个小细节都有数据库技术 | 需要新建数据库、建立连接、处理数据、关闭数据库连接。也不支持自定义的对象存储 |