首先我们新建一个Person类,最重要的当然是需要遵守<NSCoding>协议了
@interface Person : NSObject<NSCoding>
@property(nonatomic,copy) NSString *name;
@property(nonatomic,assign) int age;
@property(nonatomic,assign) int age1;
@property(nonatomic,assign) int age2;
@property(nonatomic,assign) int age3;
@end
然后在Person.m文件中实现归档解档的方法
- 归档
-(void)encodeWithCoder:(NSCoder *)aCoder
{
unsigned int count = 0;
//获的Person的所有的属性
Ivar *ivars = class_copyIvarList([Person class], &count);
for (int i = 0; i < count; i++) {
//取出属性并转成字符串
Ivar ivar = ivars[I];
const char *name = ivar_getName(ivar);
NSString *key = [[NSString alloc]initWithUTF8String:name];
//进行归档
[aCoder encodeObject:[self valueForKey:key] forKey:key];
}
}
使用
Person *person = [Person new];
person.name = @"zhangsan";
person.age = 18;
NSString *temp = NSTemporaryDirectory();
temp = [temp stringByAppendingPathComponent:@"zhangsan.plist"];
[NSKeyedArchiver archiveRootObject:person toFile:temp];
- 解档
-(instancetype)initWithCoder:(NSCoder *)aDecoder
{
self = [super init];
if (self) {
unsigned int count = 0;
Ivar *ivars = class_copyIvarList([Person class], &count);
for (int i = 0; i < count; i++) {
Ivar ivar = ivars[i];
const char *name = ivar_getName(ivar);
NSString *key = [[NSString alloc]initWithUTF8String:name];
id value = [aDecoder decodeObjectForKey:key];
[self setValue:value forKey:key];
}
}
return self;
}
使用
NSString *temp = NSTemporaryDirectory();
temp = [temp stringByAppendingPathComponent:@"zhangsan.plist"];
Person *person = (Person *)[NSKeyedUnarchiver unarchiveObjectWithFile:temp];
NSLog(@"%@ %d",person.name,person.age);
网友评论