数据持久化一般有四张方式,上面我们说了使用NSUserDefaults进行数据持久化,下面我们总结一下使用归档的方式进行数据持久化
归档是一种很常用的文件储存方法,几乎任何类型的对象都能够被归档储存(实际上是一种文件保存的形式)
归档是一种很常用的文件储存方法,几乎任何类型的对象都能够被归档储存(实际上是一种文件保存的形式)
使用NSKeyedArchiver进行归档、NSKeyedUnarchiver进行接档,这种方式在写入、读出数据之前对数据进行序列化、反序列化操作
一、对简单对象归档
可以使用archiveRootObject对简单对象进行归档
//归档
NSString *homedirectory = NSHomeDirectory();
self.archivefilepath = [homedirectory stringByAppendingPathComponent:@"object.archiver"];
NSString *homepath =[homedirectory stringByAppendingPathComponent:@"my.archiver"];//扩展名可以是任意的
//归档,可以对字符串、数字进行归档,当然了一可以对NSArray,NSDictionary进行归档,归档成功返回YES,失败返回NO
BOOL flag = [NSKeyedArchiver archiveRootObject:@"zhangsan" toFile:homepath];
if(flag){
NSLog(@"数据归档成功");
}else{
NSLog(@"数据归档失败");
}
//接档
NSString *username = [NSKeyedUnarchiver unarchiveObjectWithFile:homepath];
NSLog(@"反归档数据:%@",username);
二、对多个对象归档
对多个对象归档同样是使用NSKeyedArchiver,但是需要在归档的时候使用encodeXXX方法进行归档,最后通过writeToFile方法写入文件
//归档,写数据
CGPoint point = CGPointMake(10,10);
NSString *desc =@"坐标起始点";
NSInteger val = 10;
NSArray *stuArray =[NSArray arrayWithObjects:@"xiaozhang",@"xiaowang",@"Sandy", nil];
NSDictionary *stuInfoDic =[NSDictionary dictionaryWithObjectsAndKeys:@"22",@"age",@"male",@"sex", nil];
NSString *multipath =[homedirectory stringByAppendingPathComponent:@"multi.archiver"];
NSMutableData *mutabledata =[[NSMutableData alloc] init];
NSKeyedArchiver *archiver =[[NSKeyedArchiver alloc] initFor