runtime實(shí)現(xiàn)字典轉(zhuǎn)模型(一)

在iOS開(kāi)發(fā)中,我們肯定會(huì)遇到字典轉(zhuǎn)模型.
一般實(shí)現(xiàn)方案有下面幾種:
1.自己手寫(xiě)轉(zhuǎn),別噴我,雖然很少有人這么干,但確實(shí)是最原始的方法??
2.KVC轉(zhuǎn)模型,優(yōu)點(diǎn)是代碼少了,缺點(diǎn)是需要再每一個(gè)模型中都要去寫(xiě)一遍
3.runtime實(shí)現(xiàn):在NSObject添加一個(gè)分類(lèi),寫(xiě)一個(gè)方法即可
優(yōu)點(diǎn):①不需要在每個(gè)模型去實(shí)現(xiàn),只需寫(xiě)一遍就可以
②效率原則上是比KVC高的,因?yàn)閞untime是從模型中拿屬性去字典中匹配,而KVC是遍歷字典,并且沒(méi)有定義成屬性的key還要去調(diào)用-(void)setValue:(id)value forUndefinedKey:(NSString *)key方法,這是讓我覺(jué)得runtime實(shí)現(xiàn)效率會(huì)高的原因.如果有誤,還希望大家伙指正??

分類(lèi)中實(shí)現(xiàn)的方法代碼如下:

#import "NSObject+Model.h"
#import <objc/message.h>

@implementation NSObject (Model)


// runtime:遍歷模型中的屬性,去字典中取出對(duì)應(yīng)的value,給屬性賦值
+ (instancetype)modelWithDict:(NSDictionary *)dict
{
    id objc = [[self alloc]init];
    
    
    // 1.獲取模型中的所有屬性 (我們?nèi)〕蓡T變量,更加嚴(yán)謹(jǐn)而且是copy)
    // ivar:成員變量 property:屬性
    // class:獲取哪個(gè)類(lèi)的成員變量列表  *count: 存放成員變量的地址
    uint count = 0;
    Ivar *ivarList = class_copyIvarList(self, &count);
    
    // 遍歷成員變量數(shù)組
    for (int i =0; i < count; i++) {
        
        // 1.獲取成員變量
        Ivar ivar = ivarList[i];
        // 2.獲取成員變量名稱(chēng)
        NSString *ivarName = [NSString stringWithUTF8String:ivar_getName(ivar)];
        // 3.從字典中取出對(duì)應(yīng)的value
        NSString *key = [ivarName substringFromIndex:1];
        id value = dict[key];
        // 4.給模型中對(duì)于屬性賦值
        [objc setObject:value forKey:key];
    }

    return objc;
}
@end

這樣模型類(lèi)調(diào)用modelWithDict方法即可實(shí)現(xiàn)最簡(jiǎn)單的模型一級(jí)轉(zhuǎn)換啦.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末并思,一起剝皮案震驚了整個(gè)濱河市渠抹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌钧萍,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,948評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件侨核,死亡現(xiàn)場(chǎng)離奇詭異贷帮,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)柒瓣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)儒搭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人芙贫,你說(shuō)我怎么就攤上這事搂鲫。” “怎么了磺平?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,490評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵魂仍,是天一觀的道長(zhǎng)拐辽。 經(jīng)常有香客問(wèn)我,道長(zhǎng)擦酌,這世上最難降的妖魔是什么俱诸? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,521評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮赊舶,結(jié)果婚禮上睁搭,老公的妹妹穿的比我還像新娘。我一直安慰自己笼平,他們只是感情好园骆,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,627評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著寓调,像睡著了一般锌唾。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上捶牢,一...
    開(kāi)封第一講書(shū)人閱讀 49,842評(píng)論 1 290
  • 那天鸠珠,我揣著相機(jī)與錄音,去河邊找鬼秋麸。 笑死渐排,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的灸蟆。 我是一名探鬼主播驯耻,決...
    沈念sama閱讀 38,997評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼炒考!你這毒婦竟也來(lái)了可缚?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,741評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤斋枢,失蹤者是張志新(化名)和其女友劉穎帘靡,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體瓤帚,經(jīng)...
    沈念sama閱讀 44,203評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡描姚,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,534評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了戈次。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片轩勘。...
    茶點(diǎn)故事閱讀 38,673評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖怯邪,靈堂內(nèi)的尸體忽然破棺而出绊寻,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 34,339評(píng)論 4 330
  • 正文 年R本政府宣布澄步,位于F島的核電站冰蘑,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏驮俗。R本人自食惡果不足惜懂缕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,955評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望王凑。 院中可真熱鬧搪柑,春花似錦、人聲如沸索烹。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,770評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)百姓。三九已至渊额,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間垒拢,已是汗流浹背旬迹。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,000評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留求类,地道東北人奔垦。 一個(gè)月前我還...
    沈念sama閱讀 46,394評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像尸疆,于是被迫代替她去往敵國(guó)和親椿猎。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,562評(píng)論 2 349

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

  • 對(duì)于從事 iOS 開(kāi)發(fā)人員來(lái)說(shuō)寿弱,所有的人都會(huì)答出【runtime 是運(yùn)行時(shí)】什么情況下用runtime?大部分人能...
    夢(mèng)夜繁星閱讀 3,700評(píng)論 7 64
  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉犯眠,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 1,690評(píng)論 0 9
  • 今天我們一家去原山公園玩,重點(diǎn)是兒童游樂(lè)園症革,走鋼索筐咧,過(guò)原木橋,走木板橋噪矛,雖然有些難度量蕊,女兒去勇敢的嘗試,一次摩疑,...
    不知有漢驥無(wú)論魏晉章閱讀 90評(píng)論 0 0
  • 今天中午吃飯的時(shí)候看到探索頻道播出了關(guān)于企鵝在南極的生活雷袋,其中有一個(gè)場(chǎng)景讓我十分的震驚! 南半球的冬季十分寒冷,是...
    將軍府上閱讀 1,116評(píng)論 0 0
  • 001楷怒,萬(wàn)事開(kāi)頭難蛋勺,難在于不敢想象成功后的情景及好的結(jié)果帶來(lái)的推動(dòng)力,所以第一次成功非常重要鸠删,也是從側(cè)面說(shuō)明自信心...
    梅子的春天閱讀 272評(píng)論 0 1