归档四一种很常见的文件存储方法,几乎任何类型的对象都能够被归档存储(实际上是一种文件保存形式)。
使用NSKeyedArichiver进行归档,用NSKeyedUnarichiver进行解归档。这种方式会在写入、读出数据之前堆数据进行序列化、反序列化操作。
一,简单归档 archiveRootObject
(1),归档
- NSString *homeDictionary = NSHomeDirectory();//获取根目录
- NSString *homePath = [homeDictionary stringByAppendingPathComponent:@"test.archiver"];//添加储存的文件名
- BOOL flag = [NSKeyedArchiver archiveRootObject:@”归档测试” toFile:homePath];//归档一个字符串
(2),解归档
[NSKeyedUnarchiver unarchiveObjectWithFile:homePath] ;
缺点:只能把一个对象归档进一个文件中。
二,归档多个对象
举例:归档CGPoint点、字符串和整数,使用encode方法进行,最后再写入文件;
(1),归档
- //归档数据
- CGPoint point = CGPointMake(320.0, 480.0);
- NSString *info = @"归档测试";
- NSInteger value = 1000;
- NSString *multiHomePath = [NSHomeDirectory() stringByAppendingPathComponent:@"multiTest.archiver"];
- NSMutableData *data = [[NSMutableData alloc]init];
- NSKeyedArchiver *archvier = [[NSKeyedArchiver alloc]initForWritingWithMutableData:data];
- //对多个对象进行归档
- [archvier encodeCGPoint:point forKey:@"kPoint"];
- [archvier encodeObject:info forKey:@"kInfo"];
- [archvier encodeInteger:value forKey:@"kValue"];
- [archvier finishEncoding];
- [data writeToFile:multiHomePath atomically:YES];
(2),解归档
- NSMutableData *dataR = [[NSMutableData alloc]initWithContentsOfFile:multiHomePath];
- NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc]initForReadingWithData:dateR];
- CGPoint pointR = [unarchiver decodeCGPointForKey:@"kPoint"];
- NSString *infoR = [unarchiver decodeObjectForKey:@"kInfo"];
- NSInteger valueR = [unarchiver decodeIntegerForKey:@"kValue"];
- [unarchiver finishDecoding];
- NSLog(@"%f,%f,%@,%d",pointR.x,pointR.y,infoR,valueR);
限制:归档的都是一些基本数据类型。