利用runtime进行归档和反归档

项目中如果有个一个复杂对象需要进行本地序列化的时候我们势必要写这样的代码:
#define SomeKey1@"somekey1"

#define Somekey2 @"somekey2"

#define Somekey3 @"somekey3"

//归档

- (void)encodeWithCoder:(NSCoder *)aCoder

{

[aCoder encodeObject:self.some forKey:SomeKey1];

[aCoder encodeObject:self.CUSTSTATUS forKey:SomeKey2];

[aCoder encodeObject:self.PICTUREID forKey:SomeKey3];

}

// 解档

- (id)initWithCoder:(NSCoder *)decoder

{

if(self = [super init]) {

self.some1 = [decoder decodeObjectForKey:SomeKey1];

self.some2 = [decoder decodeObjectForKey:SomeKey2];

self.some3 = [decoder decodeObjectForKey:SomeKey3];

}

returnself;

}

当只有三个属性的时候还比较简单,但是如果更多呢,势必需要写重复的代码.不要重复,不要重复自己,千万不要重复自己.所以我打算用runtime运行时获取类的所有属性的这个特性完成归档和反归档.

具体代码如下:

利用runtime进行归档和反归档_第1张图片
利用runtime进行归档和反归档_第2张图片

这样就完成复杂对象的序列化.

使用起来也很放便,直接在你的model的.m文件中 写入WHYCodingImplementation这个宏定义

然后下面是测试结果:


利用runtime进行归档和反归档_第3张图片

你可能感兴趣的:(利用runtime进行归档和反归档)