oc中的歸檔就是把對(duì)象寫(xiě)到文件中.
首先模型必須遵守NSCoding協(xié)議,并且實(shí)現(xiàn)其中的方法 (歸檔):- (void)encodeWithCoder:(NSCoder*)aCoder;(解檔):- (id)initWithCoder:(NSCoder*)aDecoder;
@interfacePerson :NSObject<NSCoding>
@property(nonatomic,copy)NSString*name;//名稱
@property(nonatomic,strong)NSNumber*age;//年齡
@property(nonatomic,copy)NSString*occupation;//職業(yè)
@property(nonatomic,copy)NSString*nationality;//國(guó)籍
@end
/**
*歸檔***編碼
*
*@param aCoder
*/
- (void)encodeWithCoder:(NSCoder*)aCoder{
unsignedintcount =0;
Ivar*ivars =class_copyIvarList([selfclass], &count);
for(NSIntegeri=0; i
Ivarivar = ivars[i];
constchar*iName =ivar_getName(ivar);
NSString*iStr = [NSStringstringWithUTF8String:iName];
idvalue = [selfvalueForKey:iStr];
[aCoderencodeObject:valueforKey:iStr];
}
free(ivars);
}
//解碼
- (id)initWithCoder:(NSCoder*)aDecoder{
self= [superinit];
if(self){
unsignedintcount =0;
Ivar*ivars =class_copyIvarList([selfclass], &count);
for(NSIntegeri=0; i
Ivarivar = ivars[i];
constchar*key =ivar_getName(ivar);
NSString*iName = [NSStringstringWithUTF8String:key];
idvalue = [aDecoderdecodeObjectForKey:iName];
[selfsetValue:valueforKey:iName];
}
free(ivars);
}
returnself;
}
Person*person = [[Personalloc]init];
person.name=@"xiaowei";
person.age=@(22);
person.occupation=@"IT程序猿";
person.nationality=@"中國(guó)";
NSString*path =NSHomeDirectory();
path = [pathstringByAppendingPathComponent:@"xiaowei"];
NSLog(@"paht = %@",path);
//歸檔
[NSKeyedArchiverarchiveRootObject:persontoFile:path];
//解歸檔
Person*laoxiao = [NSKeyedUnarchiverunarchiveObjectWithFile:path];
NSLog(@"歡迎%@歲的%@回到%@從事%@",laoxiao.age,laoxiao.name,laoxiao.occupation,laoxiao.nationality);