Archiver简单用法:
1.用处很大. 但是用起来 比较麻烦.要从程序设计的时候就 把每一个类实现这个功能 .将内存中的 对象实例保存成 binary 到 磁盘 并且可以 逆向这个过程 用来保存 用户操作状态.
2.归档操作(NSkeyedArchiver),不同于其他数据存储,它可以把自定义对象存放在文件中。
对于一个应用来说,有唯一的沙盒与之对应,即每个应用不能跨沙盒操作文件。
代码示例:
需要注意的是,需要保存的对象类一定要引用NSCoding协议,并且实现
- (void)encodeWithCoder:(NSCoder *)aCoder
- (id)initWithCoder:(NSCoder *)aDecoder
#pragma mark Demo_3 - (void)saveDataWithArchive{ NSString *documentDirectoy = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject ]; //这里路径可以直接生成 test.archiver 文件,方便查看里面存储的内容暂且保存一个plist去archiver NSString *path = [documentDirectoy stringByAppendingPathComponent:@"test.plist"]; NSLog(@"Archiver.path---%@",path); record *tempRecord = [[record alloc]init]; tempRecord.aa = [NSNumber numberWithInt:10]; tempRecord.bb = @"b10_test"; tempRecord.cc = [NSNumber numberWithInt:100]; tempRecord.dd = [NSNumber numberWithInt:1000]; tempRecord.ee = @"e10_test"; [NSKeyedArchiver archiveRootObject:tempRecord toFile:path]; NSLog(@"Archiver 数据已存储."); } - (void)readDatafromArchive{ NSString *documentDirectoy = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject]; //这里路径可以直接生成 test.archiver 文件,方便查看里面存储的内容暂且保存一个plist去archiver NSString *path = [documentDirectoy stringByAppendingPathComponent:@"test.plist"]; record *tempRecord = [NSKeyedUnarchiver unarchiveObjectWithFile:path]; NSLog(@"aa=%@\n bb=%@\n cc=%@\n dd=%@\n ee=%@",tempRecord.aa,tempRecord.bb,tempRecord.cc,tempRecord.dd,tempRecord.ee); NSLog(@"Archiver 数据已取出"); }
自定义类:
// #import "record.h" @implementation record #pragma mark - NSCodeing协议方法(一定要实现) //当进行归档操作的时候就会调用该方法 //在该方法中要写清楚要存储对象的那些属性 - (void) encodeWithCoder:(NSCoder *)aCoder{ NSLog(@"调用了encodeWithCoder方法"); [aCoder encodeObject:_aa forKey:@"aaa"]; [aCoder encodeObject:_bb forKey:@"bbb"]; [aCoder encodeObject:_cc forKey:@"ccc"]; [aCoder encodeObject:_dd forKey:@"ddd"]; [aCoder encodeObject:_ee forKey:@"eee"]; } //当进行解档操作的时候就会调用该方法 //在该方法中要写清楚要提取对象的哪些属性 - (id)initWithCoder:(NSCoder *)aDecoder{ NSLog(@"调用了initWithCoder方法"); if (self = [super init]) { self.aa = [aDecoder decodeObjectForKey:@"aaa"]; self.bb = [aDecoder decodeObjectForKey:@"bbb"]; self.cc = [aDecoder decodeObjectForKey:@"ccc"]; self.dd = [aDecoder decodeObjectForKey:@"ddd"]; self.ee = [aDecoder decodeObjectForKey:@"eee"]; } return self; } @end
文件查看:
哈哈,其实也就这么简单!