#define WZLSERIALIZE_CODER_DECODER() \
\
- (id)initWithCoder:(NSCoder *)coder \
{ \
NSLog(@"%s",__func__); \
Class cls = [self class]; \
while (cls != [NSObject class]) { \
/*判斷是自身類還是父類*/ \
BOOL bIsSelfClass = (cls == [self class]); \
unsigned int iVarCount = 0; \
unsigned int propVarCount = 0; \
unsigned int sharedVarCount = 0; \
Ivar *ivarList = bIsSelfClass ? class_copyIvarList([cls class], &iVarCount) : NULL;/*變量列表,含屬性以及私有變量*/ \
objc_property_t *propList = bIsSelfClass ? NULL : class_copyPropertyList(cls, &propVarCount);/*屬性列表*/ \
sharedVarCount = bIsSelfClass ? iVarCount : propVarCount; \
\
for (int i = 0; i < sharedVarCount; i++) { \
const char *varName = bIsSelfClass ? ivar_getName(*(ivarList + i)) : property_getName(*(propList + i)); \
NSString *key = [NSString stringWithUTF8String:varName]; \
id varValue = [coder decodeObjectForKey:key]; \
NSArray *filters = @[@"superclass", @"description", @"debugDescription", @"hash"]; \
if (varValue && [filters containsObject:key] == NO) { \
[self setValue:varValue forKey:key]; \
} \
} \
free(ivarList); \
free(propList); \
cls = class_getSuperclass(cls); \
} \
return self; \
} \
\
- (void)encodeWithCoder:(NSCoder *)coder \
{ \
NSLog(@"%s",__func__); \
Class cls = [self class]; \
while (cls != [NSObject class]) { \
/*判斷是自身類還是父類*/ \
BOOL bIsSelfClass = (cls == [self class]); \
unsigned int iVarCount = 0; \
unsigned int propVarCount = 0; \
unsigned int sharedVarCount = 0; \
Ivar *ivarList = bIsSelfClass ? class_copyIvarList([cls class], &iVarCount) : NULL;/*變量列表旷赖,含屬性以及私有變量*/ \
objc_property_t *propList = bIsSelfClass ? NULL : class_copyPropertyList(cls, &propVarCount);/*屬性列表*/ \
sharedVarCount = bIsSelfClass ? iVarCount : propVarCount; \
\
for (int i = 0; i < sharedVarCount; i++) { \
const char *varName = bIsSelfClass ? ivar_getName(*(ivarList + i)) : property_getName(*(propList + i)); \
NSString *key = [NSString stringWithUTF8String:varName]; \
/*valueForKey只能獲取本類所有變量以及所有層級父類的屬性嫡纠,不包含任何父類的私有變量(會崩潰)*/ \
id varValue = [self valueForKey:key]; \
NSArray *filters = @[@"superclass", @"description", @"debugDescription", @"hash"]; \
if (varValue && [filters containsObject:key] == NO) { \
[coder encodeObject:varValue forKey:key]; \
} \
} \
free(ivarList); \
free(propList); \
cls = class_getSuperclass(cls); \
} \
}
用runtime序列化的宏
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
- 文/潘曉璐 我一進店門蹈矮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來砰逻,“玉大人,你說我怎么就攤上這事泛鸟◎鹋兀” “怎么了?”我有些...
- 文/不壞的土叔 我叫張陵北滥,是天一觀的道長刚操。 經常有香客問我,道長再芋,這世上最難降的妖魔是什么菊霜? 我笑而不...
- 正文 為了忘掉前任,我火速辦了婚禮济赎,結果婚禮上鉴逞,老公的妹妹穿的比我還像新娘记某。我一直安慰自己,他們只是感情好构捡,可當我...
- 文/花漫 我一把揭開白布辙纬。 她就那樣靜靜地躺著,像睡著了一般叭喜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蓖谢,一...
- 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼腕够!你這毒婦竟也來了级乍?” 一聲冷哼從身側響起,我...
- 正文 年R本政府宣布沸手,位于F島的核電站,受9級特大地震影響注簿,放射性物質發(fā)生泄漏契吉。R本人自食惡果不足惜,卻給世界環(huán)境...
- 文/蒙蒙 一诡渴、第九天 我趴在偏房一處隱蔽的房頂上張望捐晶。 院中可真熱鬧菲语,春花似錦、人聲如沸惑灵。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽英支。三九已至佩憾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間干花,已是汗流浹背妄帘。 一陣腳步聲響...
推薦閱讀更多精彩內容
- 新建一個屬性模型NSObject 的類 #import <Foundation/Foundation.h>@int...
- demo下載地址在 iOS 中歸檔數(shù)據(jù)時,如果歸檔的是我們自定義的數(shù)據(jù)模型類,則需要我們手動進行序列化和反序列化才...
- 截止收盤,北化股份報14.84元玛歌,跌幅為10%昧港,在兩市出現(xiàn)沖高回落的行情下,北化股份開盤快速殺跌近8%支子,全天表示弱...