IOS-MJExtension一句話搞定對象歸檔

MJExtension很強大攒射,幾乎支持現(xiàn)有所有的模型搁宾、字典、json數(shù)據(jù)轉(zhuǎn)換误证,而且效率非常高

以前寫對象歸檔的時候继薛,需要讓這個對象實現(xiàn)NSCoding協(xié)議,而且要對每一個需要歸檔的屬性做一些encode和decode操作愈捅,例如你之前的代碼可能是這樣子的

Person.h文件

#import"Person.h"@interfacePerson:NSObject@property(nonatomic,copy)NSString*name;@property(nonatomic,assign)intage;@property(nonatomic,assign)BOOLgay;@end

Person.m文件

#import"Person.h"@implementationPerson-(id)initWithCoder:(NSCoder*)aDecoder{if(self= [superinit]) {self.name = [aDecoder decodeObjectForKey:@"name"];NSNumber*at = [aDecoder decodeObjectForKey:@"age"];self.age = at.intValue ;NSNumber*isgay = [aDecoder decodeObjectForKey:@"gay"];self.gay = isgay.intValue;? ? }returnself;}/**

*? 將對象寫入文件的時候調(diào)用

*? 怎樣存儲

*

*? @param aCoder aCoder

*/-(void)encodeWithCoder:(NSCoder*)aCoder{? ? [aCoder encodeObject:self.name forKey:@"name"];? ? [aCoder encodeObject:[NSNumbernumberWithInt:self.age] forKey:@"age"];? ? [aCoder encodeObject:[NSNumbernumberWithInt:self.gay] forKey:@"gay"];}@end

這需要重寫initWithCoder和encodeWithCoder這兩個方法遏考,比較繁瑣,這和Android里面的實現(xiàn)Parcelable差不多蓝谨,要寫一大堆的代碼灌具,不過Android有解決這個問題的方案青团,通過安裝AndroidStudio插件來解決,具體請看AndroidStudio-Parcelable自動生成代碼插件安裝和使用這篇文章咖楣,其實督笆,iOS里面也有相關(guān)的解決方案,而且比Android實現(xiàn)更簡單诱贿,快速和高效娃肿,一句代碼搞定!

MJExtension非常好用但是容易被忽略的功能:不管你的模型屬性有幾百個珠十,只需要加一句宏MJCodingImplementation料扰,就能實現(xiàn)歸檔解檔,不用再編寫惡心的encodeWithCoder:和initWithCoder:了

代碼示例如下焙蹭,Person.h代碼不變晒杈,只需要將Person.m文件內(nèi)容改成下面的就OK了:

#import"Person.h"#import"MJExtension.h"@implementationPersonMJCodingImplementation@end

搞定,其實歸檔和反歸檔代碼本質(zhì)上都要寫壳嚎,只不過MJExtension幫我們做了桐智,我們?nèi)c擊這個MJCodingImplementation去看看,發(fā)現(xiàn)代碼是這樣的:

#import@interfaceNSObject(MJCoding)/**

*? 解碼(從文件中解析對象)

*/- (void)decode:(NSCoder*)decoder;/**

*? 編碼(將對象寫入文件中)

*/- (void)encode:(NSCoder*)encoder;@end/**

歸檔的實現(xiàn)

*/#define MJCodingImplementation \- (id)initWithCoder:(NSCoder*)decoder \{ \if(self= [superinit]) { \[selfdecode:decoder]; \} \returnself; \} \\- (void)encodeWithCoder:(NSCoder*)encoder \{ \[selfencode:encoder]; \}

再看實現(xiàn)類代碼

#import"NSObject+MJCoding.h"#import"NSObject+MJMember.h"@implementationNSObject(MJCoding)/**

*? 編碼(將對象寫入文件中)

*/- (void)encode:(NSCoder*)encoder{? ? [selfenumerateIvarsWithBlock:^(MJIvar *ivar,BOOL*stop) {if(ivar.isSrcClassFromFoundation)return;? ? ? ? [encoder encodeObject:ivar.value forKey:ivar.name];? ? }];}/**

*? 解碼(從文件中解析對象)

*/- (void)decode:(NSCoder*)decoder{? ? [selfenumerateIvarsWithBlock:^(MJIvar *ivar,BOOL*stop) {if(ivar.isSrcClassFromFoundation)return;? ? ? ? ivar.value = [decoder decodeObjectForKey:ivar.name];? ? }];}@end

它其實就幫我們實現(xiàn)了把所有屬性都歸檔和反歸檔的操作烟馅,那么問題來了,加入我不想所有的文件都歸檔然磷,我只想歸檔name和age屬性郑趁,不想歸檔gay屬性,那怎么辦呢姿搜?其實MJExtension已經(jīng)幫我們想好了寡润,只需要調(diào)用一下:

[Person setupIgnoredCodingPropertyNames:^NSArray*{return@[@"gay"];}];

這個方法就可以了!>斯瘛K笪啤!V路荨1涑椤!氮块!

作者:街角仰望

鏈接:http://www.reibang.com/p/7e8af12ab5a4

來源:簡書

著作權(quán)歸作者所有绍载。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處滔蝉。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末击儡,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蝠引,更是在濱河造成了極大的恐慌阳谍,老刑警劉巖蛀柴,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異矫夯,居然都是意外死亡名扛,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門茧痒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來肮韧,“玉大人,你說我怎么就攤上這事旺订∨螅” “怎么了?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵区拳,是天一觀的道長拘领。 經(jīng)常有香客問我,道長樱调,這世上最難降的妖魔是什么约素? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮笆凌,結(jié)果婚禮上圣猎,老公的妹妹穿的比我還像新娘。我一直安慰自己乞而,他們只是感情好送悔,可當我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著爪模,像睡著了一般欠啤。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上屋灌,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天洁段,我揣著相機與錄音,去河邊找鬼共郭。 笑死祠丝,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的落塑。 我是一名探鬼主播纽疟,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼憾赁!你這毒婦竟也來了污朽?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤龙考,失蹤者是張志新(化名)和其女友劉穎蟆肆,沒想到半個月后矾睦,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡炎功,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年枚冗,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蛇损。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡赁温,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出淤齐,到底是詐尸還是另有隱情股囊,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布更啄,位于F島的核電站稚疹,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏祭务。R本人自食惡果不足惜内狗,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望义锥。 院中可真熱鬧柳沙,春花似錦、人聲如沸缨该。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽贰拿。三九已至,卻和暖如春熄云,著一層夾襖步出監(jiān)牢的瞬間膨更,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工缴允, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留荚守,地道東北人。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓练般,卻偏偏與公主長得像矗漾,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子薄料,可洞房花燭夜當晚...
    茶點故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內(nèi)容

  • MJExtension很強大敞贡,幾乎支持現(xiàn)有所有的模型、字典摄职、json數(shù)據(jù)轉(zhuǎn)換誊役,而且效率非常高 以前寫對象歸檔的時候...
    街角仰望閱讀 2,894評論 0 4
  • runtime詳解 公司項目用到一個三方開源庫获列,里面有個bug,不能改動源碼蛔垢,我想來想去击孩,只能通過runtime這...
    3875e78848bf閱讀 646評論 0 0
  • runtime(簡稱運行時),是一套 純C(C和匯編寫的) 的API鹏漆。而 OC 就是 運行時機制巩梢,也就是在運行時候...
    看看外面的世界閱讀 344評論 0 0
  • 生活因為運動而精彩,足球帶給球迷無比的興奮艺玲。2018年括蝠,足球世界杯又來了!在你的生命里板驳,你經(jīng)歷了多少屆激動...
    常樂彬閱讀 305評論 0 0
  • 人這一生總有那么多遺憾又跛,譬如愛情,譬如抱負……可悲的是若治,有的人在最好的年紀碰到最壞的時代慨蓝,與幸運失之交臂;有的人卻...
    諸葛不靚的故襄閱讀 388評論 0 0