(个人笔记)RunTime 简单实现归档解档

个人笔记

就是懒,不想每次有新数据添加的时候,都要进行归档解档操作

//归档

- (void)encodeWithCoder:(NSCoder*)coder{

unsignedintcount =0;

//使用class_copyIvarList 获取到 UserInfo 类里面的属性,(.h文件和.m文件里面的都能得到)

Ivar* ivars =class_copyIvarList([UserInfo class], &count);

//遍历数量

for(inti =0; i < count; i++) {

//取出对应的Ivar

Ivarivar = ivars[i];

//拿到名称

constchar* name =ivar_getName(ivar);

//OC字符串

NSString* key = [NSStringstringWithUTF8String:name];

//归档

[coderencodeObject:[selfvalueForKey:key]forKey:key];}}

//解档 跟上面的是一个意思

- (instancetype)initWithCoder:(NSCoder*)coder

{

if(self= [superinit]) {

//属性的个数

unsignedintcount =0;

Ivar* ivars =class_copyIvarList([UserInfoclass], &count);

for(inti =0; i < count; i++) {

//取出对应的Ivar

Ivarivar = ivars[i];

//拿到名称

constchar* name =ivar_getName(ivar);

//OC字符串

NSString* key = [NSString stringWithUTF8String:name];

//解档

idvalue = [coder  decodeObjectForKey:key];

//KVC--设置值到属性上面!!!

[self setValue:value forKey:key];

}}

returnself;

}

/**

*保存用户信息

*/

-(void)saveUserInfo

{

//沙盒

NSString* temp =NSTemporaryDirectory();

NSString* filePath = [temp stringByAppendingPathComponent:@"userInfo.yt"];

//归档

[NSKeyedArchiver archiveRootObject:self toFile:filePath];

}

//至于用户退出 清空数据  同样是遍历 只不过将value设置为空就好了

你可能感兴趣的:((个人笔记)RunTime 简单实现归档解档)