項(xiàng)目中如果有個一個復(fù)雜對象需要進(jìn)行本地序列化的時候我們勢必要寫這樣的代碼:
#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;
}
當(dāng)只有三個屬性的時候還比較簡單,但是如果更多呢,勢必需要寫重復(fù)的代碼.不要重復(fù),不要重復(fù)自己,千萬不要重復(fù)自己.所以我打算用runtime運(yùn)行時獲取類的所有屬性的這個特性完成歸檔和反歸檔.
具體代碼如下:


這樣就完成復(fù)雜對象的序列化.
使用起來也很放便,直接在你的model的.m文件中 寫入WHYCodingImplementation這個宏定義
然后下面是測試結(jié)果:

