项目中如果有个一个复杂对象需要进行本地序列化的时候我们势必要写这样的代码:
#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运行时获取类的所有属性的这个特性完成归档和反归档.
具体代码如下:
这样就完成复杂对象的序列化.
使用起来也很放便,直接在你的model的.m文件中 写入WHYCodingImplementation这个宏定义
然后下面是测试结果: