iOS 数据持久化的方式

一、什么是数据持久化

所谓的数据持久化,就是将数据保存到硬盘中,使得在应用程序或机器重启后可以继续访问之前保存的数据,既可以减少用户流量消耗,也可以增强APP的体验效果。

二、沙盒

沙盒(sandbox):iOS系统为每个应用程序创建的存储空间,且每个应用程序只能访问自身的存储空间,不能相互通信,所有的非代码文件都要保存在此,例如属性文件plist、文本文件、图像、图标、媒体资源等。
[图片上传中...(image.png-a7c639-1552281691771-0)]

沙盒目录

沙盒目录下的文件及文件夹:

sandbox.png

获取沙盒目录路径:

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

该文件为隐藏文件,从文件名可以看出该文件为一个管理文件,对当前移动设备管理元数据,从中可获取当前应用的唯一标示;

三、持久化方式

常用的持久化方式包括以下几种:

  1. 属性列表(plist存储)
  2. 偏好设置(NSUserDefaults)
  3. 归档序列化存储
  4. CoreData
  5. SQL

推荐阅读更多精彩内容