Files
knowledge-kit/Chapter1 - iOS/1.53.md
2020-02-25 17:46:51 +08:00

18 lines
2.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 数据持久化方案
## 功能
主要将一些网络获取下来的数据保存到 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