沙盒 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];