一、什么是数据持久化
所谓的数据持久化,就是将数据保存到硬盘中,使得在应用程序或机器重启后可以继续访问之前保存的数据,既可以减少用户流量消耗,也可以增强APP的体验效果。
二、沙盒
沙盒(sandbox):iOS系统为每个应用程序创建的存储空间,且每个应用程序只能访问自身的存储空间,不能相互通信,所有的非代码文件都要保存在此,例如属性文件plist、文本文件、图像、图标、媒体资源等。
[图片上传中...(image.png-a7c639-1552281691771-0)]
沙盒目录
沙盒目录下的文件及文件夹:
获取沙盒目录路径:
NSLog(@"沙盒目录路径:%@", NSHomeDirectory());
沙盒路径.png
Documents
保存应用运行时生成的需要持久化的数据,iTunes会自动备份该目录。
苹果建议将在应用程序中浏览到的文件数据保存在该目录下。
Library
获取 Library 路径:
//获取Library的目录路径
NSString *libDir = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory,NSUserDomainMask,YES) firstObject];
NSLog(@"Library 路径:%@", libDir);
Library.png
分为 Cache 和 Preferences
Cache
一般存储的是缓存文件,iTunes不会备份该目录。内存不足时会被清除,应用没有运行时,可能会被清除。一般存储体积大、不需要备份的非重要数据,例如音频、视频、图片等数据。
获取 Cache 路径:
// 获取cache目录路径
NSString *cachesDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES) firstObject];
NSLog(@"Cache 路径:%@", cachesDir);
Preferences
保存应用程序的所有偏好设置iOS的Settings(设置),我们不应该直接在这里创建文件,而是需要通过NSUserDefault这个类来访问应用程序的偏好设置。
iTunes会自动备份该文件目录下的内容。
比如说:是否允许访问图片,是否允许访问地理位置......
tmp
临时文件夹,iTunes不会备份这个目录,用来保存临时数据,应用退出时会清除该目录下的数据。
tmp目录获取:
// 获取tmp目录路径
NSString *tmp = NSTemporaryDirectory();
SystemData
未找到相关文档来说明起存储规则,有待继续探究。。。
.com.apple.mobile_container_manager.metadata.plist
该文件为隐藏文件,从文件名可以看出该文件为一个管理文件,对当前移动设备管理元数据,从中可获取当前应用的唯一标示;
三、持久化方式
常用的持久化方式包括以下几种:
- 属性列表(plist存储)
- 偏好设置(NSUserDefaults)
- 归档序列化存储
- CoreData
- SQL
网友评论