iOS 對KVC底層實(shí)現(xiàn)的理解

s大家從網(wǎng)上的資料也可以查找出對KVC的描述逢捺。那我也就站在前人的基礎(chǔ)上做一個小小的偷懶癞季,復(fù)制一段網(wǎng)上的資料。

KVC運(yùn)用了一個isa-swizzling技術(shù)志于。isa-swizzling就是類型混合指針機(jī)制辉巡。KVC主要通過isa-swizzling,來實(shí)現(xiàn)其內(nèi)部查找定位的。isa指針瓤荔,如其名稱所指钥组,(就是is a kind of的意思),指向維護(hù)分發(fā)表的對象的類程梦。該分發(fā)表實(shí)際上包含了指向?qū)崿F(xiàn)類中的方法的指針,和其它數(shù)據(jù)郎逃。

比如說如下的一行KVC的代碼:

[site setValue:@"sitename"forKey:@"name"];

就會被編譯器處理成:

SEL sel = sel_get_uid ("setValue:forKey:");

IMPmethod = objc_msg_lookup (site->isa,sel);

method(site, sel, @"sitename",@"name");

IPM注釋:

其實(shí)挺份,還有一種更加簡單的方法可以讓我們辦到相同的目的,運(yùn)用IMP指針优训,IMP就是Implementation的縮寫蚤吹,顧名思義,它是指向一個方法實(shí)現(xiàn)的指針躲因,每一個方法都有一個對應(yīng)的IMP,所以毛仪,我們可以直接調(diào)用方法的IMP指針芯勘,來避免方法調(diào)用死循環(huán)的問題。

看了上一段大家KVC有個初步的認(rèn)識衡怀,那下面就具體結(jié)合實(shí)際中應(yīng)用來進(jìn)行分析安疗。

在.h文件中的申明

下面是字典轉(zhuǎn)模型

以上代碼就是一個簡單字典轉(zhuǎn)模型的寫法荐类。在這里要注意的就.h里的屬性聲明名稱必須和字典里的Key保持一致,這是問什么了如果不一致的話就會報錯。我對KVC底層理解就從這句話開始的潘拨。

首先要考慮的就是我們在使用setValuesForKeysWithDictionary:這個方法饶号,這個方法的底層是調(diào)用setValue:forKey:,到了這里我們就一下子回到上面紅色的那一大部分茫船。(這里的Value和Key都可以通過字典轉(zhuǎn)數(shù)組在遍歷數(shù)組來獲取。

)但到了這一步問題還是沒有解決涩禀,那么我們就往下面走然眼。上面紅色部分為我們提供一個訪問路徑,告訴內(nèi)這塊是誰的(好比如一個標(biāo)記)它并沒有告述我們最想要的答案罪治。那在這里我只能做一個它的底層實(shí)現(xiàn)推測。

method(site,sel, @"sitename", @"name")雁社;到了這一步后我們的路徑已經(jīng)確定晒骇,我認(rèn)為他下邊有類似我們的set和get這樣的方法(這種想法是起源與屬性set和get方法的使用),這個方法的名稱就是key『name』洪囤,等等到了這里是我們是不是感覺這樣的東西很熟悉,那就是我們類中聲明的屬性也有這樣的方法喇完,這兩者類的isa相同的那它有必要建兩個嗎我認(rèn)為method(site,sel, @"sitename", @"name")剥啤;是會與屬性的set和get會產(chǎn)生一個連接。到了這里是不是思路打開了府怯。上面的報錯也可以解決了因?yàn)閗ey寫錯或字典中的數(shù)據(jù)過多的報錯都是沒有辦法取得關(guān)聯(lián)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末则涯,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子肖揣,更是在濱河造成了極大的恐慌浮入,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件彤断,死亡現(xiàn)場離奇詭異,居然都是意外死亡宰衙,警方通過查閱死者的電腦和手機(jī)睹欲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來袋哼,“玉大人闸衫,你說我怎么就攤上這事∥党觯” “怎么了?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵稀余,是天一觀的道長趋翻。 經(jīng)常有香客問我,道長嘿歌,這世上最難降的妖魔是什么茁影? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任募闲,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘仍侥。我一直安慰自己,他們只是感情好农渊,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布或颊。 她就那樣靜靜地躺著,像睡著了一般醉顽。 火紅的嫁衣襯著肌膚如雪平挑。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天通熄,我揣著相機(jī)與錄音,去河邊找鬼石抡。 笑死助泽,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的嗡贺。 我是一名探鬼主播,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼煞茫,長吁一口氣:“原來是場噩夢啊……” “哼摄凡!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起亲澡,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤床绪,失蹤者是張志新(化名)和其女友劉穎其弊,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體梭伐,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡仰担,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年摔蓝,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片项鬼。...
    茶點(diǎn)故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖鸠真,靈堂內(nèi)的尸體忽然破棺而出龄毡,到底是詐尸還是另有隱情,我是刑警寧澤沦零,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站疾渴,受9級特大地震影響屯仗,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜魁袜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望店量。 院中可真熱鬧鞠呈,春花似錦融师、人聲如沸粟按。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽庙曙。三九已至,卻和暖如春捌朴,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背洼怔。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工左驾, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人诡右。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓帆吻,卻偏偏與公主長得像域那,于是被迫代替她去往敵國和親猜煮。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評論 2 351

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

  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉翠肘,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 1,692評論 0 9
  • 前言 到了今天終于要"出院"了,要總結(jié)一下住院幾天的收獲辫秧,談?wù)凴untime到底能為我們開發(fā)帶來些什么好處束倍。當(dāng)然它...
    一縷殤流化隱半邊冰霜閱讀 23,359評論 56 317
  • 對于從事 iOS 開發(fā)人員來說,所有的人都會答出【runtime 是運(yùn)行時】什么情況下用runtime?大部分人能...
    夢夜繁星閱讀 3,700評論 7 64
  • iPhone程序開發(fā) KVO/KVC實(shí)現(xiàn)機(jī)理分析是本文要介紹的內(nèi)容盟戏,不多說绪妹,直接進(jìn)入話題。我們來看詳細(xì)內(nèi)容柿究。 Ob...
    零紀(jì)年閱讀 21,222評論 5 26
  • 一部金融小說邮旷。用書中嘉評概括是從金融同業(yè)交易角度,刻畫了銀行同質(zhì)化的惡性競爭等種種問題蝇摸,又是金融創(chuàng)新婶肩、風(fēng)險博弈的故...
    芝秋閱讀 889評論 0 0