什么是归档呢?
归档原名叫 Archiver[‘ɑ:kaiv] ,可以理解为将数据以序列化的方式存储到本地,像是将文件放入文件夹中一样,进行资料的归档存放。其实相关类名为NSKeyedArchiver,keyed在这里可以理解为为归档的数据赋上了键的意思,就像给文件村当时要有对照的文件名。
针对归档对象的多少我们可以将归档分为单个对象归档和多个对象统一归档。
归档单个对象步骤:
a、创建文件目录
b、对文件进行归档Archiver
c、对文件进行解归档unArchiver
// 归档单个对象-----------------------
NSString *homeDirectory = NSHomeDirectory();// 根目录
NSString *demoPath = [homeDirectory stringByAppendingPathComponent:@"demo.archiver"];// 添加存储的文件名
BOOL flag = [NSKeyedArchiver archiveRootObject:@"Cloudox" toFile:demoPath];// 归档一个字符串,并返回成功与否的标记
if (flag) NSLog(@"归档成功");
NSLog(@"解档后为:%@", [NSKeyedUnarchiver unarchiveObjectWithFile:demoPath]);
归档多个对象的步骤:
a、创建文件目录
b、设置存储多个对象的容器NSMutableData
c、开始对对象进行归档Archiver,然后结束对多个对象的归档finishEncoding。
d、将对象容器写到文件中
NSString *name = @"张三";
NSInteger age = 27;
//路径
NSString *multiPath = [homeDirectory stringByAppendingPathComponent:@"multi.archiver"];
//存储多个对象的容器
NSMutableData *multiData = [[NSMutableData alloc] init];
NSKeyedArchiver *multiArchiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:multiData];
[multiArchiver encodeObject:name forKey:@"name"];
[multiArchiver encodeInteger:age forKey:@"age"];
[multiArchiver finishEncoding];// 结束对多个对象的归档
[multiData writeToFile:multiPath atomically:YES];
e、解档是将前三个步骤反着来:
1、创建一个解挡容器,同时取出存储归档的数据。
2、解档容器放到multiUnarchiver中。
3、取出相应的归档数据。
4、结束解档。
// 解档
//存储解档后多个对象的容器
NSMutableData *unMultiData = [[NSMutableData alloc] initWithContentsOfFile:multiPath];
NSKeyedUnarchiver *multiUnarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:unMultiData];
NSString *unName = [multiUnarchiver decodeObjectForKey:@"name"];
NSInteger unAge = [multiUnarchiver decodeIntegerForKey:@"age"];
[multiUnarchiver finishDecoding];// 结束对多个对象的解档
NSLog(@"多对象解档后为:%@的年龄为%ld", unName, unAge);