沙盒
1.定义
沙盒:IOS的沙盒(sandbox)机制:是一种安全体系,IOS应用程序只能对自己创建的应用程序进行读取文件,这个独立 封闭 安全的空间,就是咱们说得沙盒。他里面一般存放着你的程序需要的文件,数据持久化的一些文件(Plist sqlist…)音视频 图片以及其他资源文件
2.每个应用程序只有一个沙盒 沙盒里面有三个文件夹
1)Documents 目录下的内容 会被同步到另一台设备 可以存放媒体资源 文本资源
2)Library 可以把缓存的内容放到Library/Caches
3)tmp 创建临时文件的目录,当我们的设备重启时,文件会被自动清除
4)获取根目录的方式
NSString *homePath = NSHomeDirectory();
5)获得Documents的方式
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *DocumentsPath = [paths firstObject];
6) 获取Library目录
NSArray *path2 = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES];
NSString *library = [path2 lastObject];
7) 获取Caches目录
NSArray *Path3 = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *library = [path3 lastObject];
8)获取临时文件目录Tmp
NSString *tmpPath = NSTemporaryDirectory();
归档
1.定义
归档 :把咋们内存里面的数据放到一个文件里面 归档又叫序列化(coding)归档后的文件 会被加密
2.使用的类 NSKeyedArchiver(归档) NSKeyedUnarchiver(解归档)
3.归档可以归档文件 数据 任何数据(直接归档一个类实例化的对象 数组 字典 字符串 文本 图片...)
4.第一种归档
归档步骤 1.归档路径 需要归档的数据 2.归档 解归档
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask/*收索范围*/, YES);
NSString *documentsPath = [paths lastObject];
拼接归档文件的路径
NSString *path = [documentsPath stringByAppendingPathComponent:@“userList.archiver"];
将小米 ,小明,小海归档 将他们放到一个数组里
NSArray *users = @[@“小米",@"小明",@"小海"];
BOOL success = [NSKeyedArchiver archiveRootObject:users /*归档的数据*/toFile:path/*归档路径*/];
解归档
1.步骤 1)解归档的文件路径 2)解归档
NSArray *paths1 = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path = [[paths1 lastObject] stringByAppendingPathComponent:@“userList.archiver/*这里的路径要和归档的时候相同*/”];
NSArray *list = [NSKeyedUnarchiver unarchiveObjectWithFile:path];
5.第二种归档
这里要使用NSData 二进制数据类
归档
1)步骤
(1)归档文件路径 准备需要归档的数据
(2)写一个NSMutableData 通过归档的类 让Data准备写入到文件
(3)开始(归档)编码
(4) 结束(归档)编码 把Data数据写入到文件
归档的数据数组 字典
NSArray *list = @[@"111",@"222",@"333"];
NSDictionary *dic = @{@"key":@"value"};
(1)归档文件路径 准备需要归档的数据
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path = [[paths lastObject] stringByAppendingPathComponent:@“userList.archiver”];
(2)写一个NSMutableData 通过归档的类 让Data准备写入到文件
NSMutableData *data = [[NSMutableData alloc]init];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc]initForWritingWithMutableData:data];
(3)开始(归档)编码
[archiver encodeObject:list forKey:@“list"];
[archiver encodeObject:dic forKey:@“dic"];
(4) 结束(归档)编码 把Data数据写入到文件
[archiver finishEncoding];
BOOL success = [data writeToFile:path atomically:YES];
说明:atomically 设置为YES的时候 在写入数据时 如果出现意外情况(用户突然强制退出了应用程序 断电。。。)会把写入的临时文件的内容 清除 不在写入到目标文件
设置为NO的时候 在写入数据时 如果出现意外情况(用户突然强制退出了应用程序 断电。。。)都会把写入的临时文件的内容写入到目标文件(不论文件是否完整)
解归档
步骤:
1.文件路径
2.读取文件里面Data数据
3.通过解归档对象 读取Data数据 准备解归档
4.解归档数据
1.文件路径
NSArray *paths1 = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path1 = [[paths1 lastObject] stringByAppendingPathComponent:@“userList.archiver"];
2.读取文件里面Data数据
NSData *data1 = [NSData dataWithContentsOfFile:path1];
3.通过解归档对象 读取Data数据 准备解归档
NSKeyedUnarchiver *unArchiver = [[NSKeyedUnarchiver alloc]initForReadingWithData:data1];
4.解归档数据
NSArray *arra = [unArchiver decodeObjectForKey:@“list”];
NSDictionary *dict = [unArchiver decodeObjectForKey:@"dic"];
6.第三种归档
想归档 自定义类的对象
步骤
1)遵守NSCoding协议
2)实现归档协议里面的方法
3)逐一对 自定义类里面的属性 进行了编码和解码 这时候这个对象 就具备了归档 解归档的功能
4)开始归档 解归档
代码:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES);
NSString *path = [[paths lastObject] stringByAppendingPathComponent:@“UserModel.archive"];
UserModel *model = [[UserModel alloc]init];
model.name = @“小明";
model.age = 18;
BOOL success = [NSKeyedArchiver archiveRootObject:model toFile:path];
解归档
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path = [[paths lastObject] stringByAppendingPathComponent:@“UserModel.archive"];
UserModel *model = [NSKeyedUnarchiver unarchiveObjectWithFile:path];
NSStNSString *path = [documentsPath stringByAppendingPathComponent:@"userList.archiver"];ring *documentsPath = [paths lastObject];