对象归档?就是把对象的数据保存成文件实现数据的加密(即在文档中不是明文显示)和永久储存。
需要使用时,则从文件中恢复即可。
(1)标准的数据
//main.m文件 #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { //把一个数组进行归档 //创建一个文件路径 NSString *homePath=NSHomeDirectory(); NSString *filePath=[homePath stringByAppendingPathComponent:@"test.archive"];//后缀也可以是.arc //创建个准备归档的数组 NSArray *[email protected][@"111",@"222",@"333"]; BOOL success=[NSKeyedArchiver archiveRootObject:arr1 toFile:filePath]; if (success) { NSLog(@"success"); } //从归档文件中恢复数据 NSArray *arr2=[NSKeyedUnarchiver unarchiveObjectWithFile:filePath]; NSLog(@"%@",arr2); } return 0; }
文件归档的效果,即创建了一个文件:
解归档,就是输出了数组的结果:
( 111, 222, 333 )
(2)自定义数据的归档,即创建一个数据对象data,然后再把这个data写入到文件中(但是会先创建一个归档对象,并用归档对象的写入数据方法往这个数据对象中写入对象)。解归档,就是先把这个文件(其实是数据对象data)以data形式提炼出来,然后再解归档,然后利用key值调用对象值。
//main.m文件 #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { //创建一个文件路径 NSString *homePath=NSHomeDirectory(); NSString *filePath=[homePath stringByAppendingPathComponent:@"custom.arc"]; NSMutableData *data1=[NSMutableData data];//创建一个数据对象 NSKeyedArchiver *arc1=[[NSKeyedArchiver alloc]initForWritingWithMutableData:data1];//以data数据对象创建一个归档对象 [arc1 encodeObject:@"jack" forKey:@"name"];//把数据写入到归档文件中,即data中 [arc1 encodeFloat:50 forKey:@"weight"]; [arc1 finishEncoding];//结束写入数据 [data1 writeToFile:filePath atomically:YES];//把数据对象写入归档文件中 //先用数据对象把这个文件接下来 NSData *data2=[NSData dataWithContentsOfFile:filePath]; //再利用这个数据对象创建个解归档对象 NSKeyedUnarchiver *unarc1=[[NSKeyedUnarchiver alloc] initForReadingWithData:data2]; //利用解归档对象提取里面值 float weight1=[unarc1 decodeFloatForKey:@"weight"]; NSString *name1=[unarc1 decodeObjectForKey:@"name"]; NSLog(@"%.0f,%@",weight1,name1); } return 0; }
文件归档的效果:
解归档的输出结果:
50,jack
时间: 2024-10-15 18:58:43