mirror of
https://github.com/NohamR/knowledge-kit.git
synced 2026-05-24 20:00:37 +00:00
18 lines
2.9 KiB
Markdown
18 lines
2.9 KiB
Markdown
|
||
# 数据持久化方案
|
||
|
||
## 功能
|
||
主要将一些网络获取下来的数据保存到 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都有自己的数据库,比如微信、微博,为了较好的用户体验在每个小细节都有数据库技术| 需要新建数据库、建立连接、处理数据、关闭数据库连接。也不支持自定义的对象存储 |
|
||
|
||
|
||
## 2个概念:Relation、Object
|