1.归档的基本概念
- 归档: 是指将数据写入文件存储到程序的沙盒中,当再次重新打开程序时,可以还原这些数据. 称它为数据序列化, 数据持久化. 临时数据: 存储在内存中的数据, 程序关闭, 内存释放,数据丢失
- 数据持久性的方式
1) NSKeyedArchiver—-对象归档
2) NSUserDefaults
3) 属性列表化(NSArray, NSDictionaty保存文件)
4) SQlite数据库, Core Data数据库 - 归档的形式
1) 对Foundation库中对象进行归档
2) 自定义对象进行归档(需要实现归档协议, NSCoding) - 归档后的文件是加密的,属性列表是明文的.
- 归档
1) 使用NSData实例作为归档的存储数据
2) 添加归档的内容(设置key与value)
3) 完成归档
4) 将归档数据存入磁盘中 - 解归档
1) 从磁盘读取文件, 生成NSData实例
2) 根据Data实例创建和初始化解归档实例
3) 解归档, 根据key访问value的值 - 苹果手机为了保证自己数据上的绝对的安全,设计了沙盒文件(其中有三个文件Documents,Library,tmp),每一个应用程序都配备了自己的沙盒文件,每一次运行,文件夹的名字就会变成一个没有任何规律的字符串
- 通过数组获取沙盒路径的方法有三个参数:1). 当前要前往哪一个文件夹,前往documents文件用NSDocumentDirectory,前往caches文件用NSCachesDirectory 2). 访问的文件夹的类型,指定访问是用户文件夹 3). 绝对路劲(YES),相对路劲(NO)–绝对路劲是给系统来使用的,系统可以根据当前的路劲找到文件夹.我们在操作文件的时候都是用绝对路劲,相对路劲只会把要前往的文件夹现实,其他的部分都是~,告诉程序员要去那个文件夹
- 沙盒(本质是一个文件夹,名字随机分配)里一共有三个文件:
1) Documents文件是要是用来存储用户想要存储的一些信息,比如收藏的信息或者自己设置的一些内容,比如我们做的收藏功能就是往这个文件夹里写
2) Library文件夹是方便程序开发者使用的,主要操作它里面的两个文件夹,caches和Preferences. caches:用来保存缓存文件,SDWebImage会把图片加载到缓存文件中,所以清除缓存功能就是把这个文件夹删除.Preferences一般用来保存程序员设置的信息,比如NSUserDefaults就会把数据保存到这个文件夹中
3) tmp文件一般存放临时内容,之前版本还有一个.app文件
2.第一种归档方式
main.m文件
**归档对象**
NSString *homepath = NSHomeDirectory();
NSString *path = [homepath stringByAppendingPathComponent:@"archiver2.plist"];
NSMutableData *data = [NSMutableData data];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc]initForWritingWithMutableData:data];
NSArray *array = @[@"zhangsam",@"liuyang"];
[archiver encodeObject:array forKey:@"name"];
[archiver encodeInt:100 forKey:@"number"];
[archiver finishEncoding];
BOOL success = [data writeToFile:path atomically:YES];
if (success) {
NSLog(@"success");
}***解归档***
NSString *homepath = NSHomeDirectory();
NSString *path = [homepath stringByAppendingPathComponent:@"archiver2.plist"];
NSData *data = [NSData dataWithContentsOfFile:path];
NSKeyedUnarchiver *unArchiver = [[NSKeyedUnarchiver alloc]initForReadingWithData:data];
int number = [unArchiver decodeIntForKey:@"number"];
NSArray *array = [unArchiver decodeObjectForKey:@"name"];
NSLog(@