iOS - 归档的理解和摘记

来源:互联网 发布:linux 修改权限 chmod 编辑:程序博客网 时间:2024/05/17 00:07

使用归档的好处是能存储自定义对象,而不是只能像plist和偏好存储只能存储常见类型。而且plist文件保存数据打开直接显示,归档打开是乱码,安全一点。
以下是使用归档时几个注意点:
1.如果像将一个自定义对象保存到文件中,必须实现NSCoding协议
2.如果是继承,子类一定要重写coder两个方法
3.保存数据文件名后缀可以任意命名

首先是在自定义类中要实现两个方法,一个是-(void)encodeWithCoder:(NSCoder *)aCoder,这个方法在一个自定义对象保存到文件的时候就会调用,方法中说明如何存储自定义对象的属性,先看代码再解释

-(void)encodeWithCoder:(NSCoder *)aCoder {     [aCoder encodeObject:self.name forKey:@"name"];     [aCoder encodeInteger:self.age forKey:@"age"];     [aCoder encodeDouble:self.height forKey:@"height"]; }

打一个比方,你现在要把这个对象存储起来,其实就像是到银行存钱一样,self.name 就是你要存的钱,forKey的name 就是你的账户名,到时候取钱时候好用来找你的钱。二encoder后面跟的属性是你数据类型,也就是你的钱是人民币还是美元或者别的。
同理下一个方法

-(id)initWithCoder:(NSCoder *)aDecoder{     //注意:在构造方法中需要先初始化父类的方法        if (self=[super init]) {         self.name=[aDecoder decodeObjectForKey:@"name"];         self.age=[aDecoder decodeIntegerForKey:@"age"];         self.height=[aDecoder decodeDoubleForKey:@"height"];     }     return self;}

就是银行取钱,用你当初的账户取出对应类型的钱。

然后就是具体的Save和Read了。
Save和Read之前都需要先取得路径,

    NSString *docPath=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];    NSString *path=[docPath stringByAppendingPathComponent:@"person.xiaoming"];

然后就是
Save:[NSKeyedArchiver archiveRootObject:p toFile:path];
Read:Person *xiaoming=[NSKeyedUnarchiver unarchiveObjectWithFile:path];

然后应该就完事了

0 0
原创粉丝点击