iOS -- KVO 基于runtime的剖析

最近一直有小伙伴問我kvo基于運行時的一些底層原理罢吃,覺得有必要寫點東西記錄一下孤荣。所謂KVO止后,即:Key-Value Observing,它提供一種機制葛虐,當指定的對象的屬性被修改后胎源,則其觀察者就會接受到通知。簡單的說就是每次指定的被觀察的對象的屬性被修改后挡闰,KVO就會自動通知相應(yīng)的觀察者了乒融。KVO其實也是“觀察者”設(shè)計模式的一種應(yīng)用。這種模式有利于兩個類間的解耦合摄悯,尤其是對于 業(yè)務(wù)邏輯與視圖控制 這兩個功能的解耦合赞季。KVO 的具體實現(xiàn)具體實現(xiàn)代碼如下:


當改變被觀察對象person的值時,觀察者Viewcontroller會調(diào)用相應(yīng)觀察者方法


KVO 的實現(xiàn)原理

KVO 是基于運行時實現(xiàn)的

isa Class NSKVONotifying_Person?


上述例子中奢驯,如上圖申钩,當 p1.name 的值改變時,p1對象的 isa 指針會指向 NSKVONotifying_Person(這里我喜歡稱之為中間類)瘪阁,意味著撒遣,在程序運行時,會動態(tài)生成一個 NSKVONotifying_Person 類管跺,該類繼承于 Person义黎,而且該類中也有個 -setName: 方法,方法中在設(shè)置 name 的同時實現(xiàn)了:

- (void)setName:(NSString *)name

{

[super setName:name];

// 這兩個方法底層會調(diào)用observer的- (void)observeValueForKeyPath: ofObject: change: context:這個方法

[self willChangeValueForKey:@"age"];

[self didChangeValueForKey:@"age"];

}

至此kvo基于運行時的實現(xiàn)已經(jīng)不再神秘豁跑。廉涕。。更加詳細的剖析艇拍,會在大伙有需求的時候再來做總結(jié)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末狐蜕,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子卸夕,更是在濱河造成了極大的恐慌层释,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件快集,死亡現(xiàn)場離奇詭異贡羔,居然都是意外死亡廉白,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門治力,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蒙秒,“玉大人,你說我怎么就攤上這事宵统≡谓玻” “怎么了?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵马澈,是天一觀的道長瓢省。 經(jīng)常有香客問我,道長痊班,這世上最難降的妖魔是什么勤婚? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮涤伐,結(jié)果婚禮上馒胆,老公的妹妹穿的比我還像新娘。我一直安慰自己凝果,他們只是感情好祝迂,可當我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著器净,像睡著了一般型雳。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上山害,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天纠俭,我揣著相機與錄音,去河邊找鬼浪慌。 笑死冤荆,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的权纤。 我是一名探鬼主播钓简,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼妖碉!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起芥被,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤欧宜,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后拴魄,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體冗茸,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡席镀,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了夏漱。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片豪诲。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖挂绰,靈堂內(nèi)的尸體忽然破棺而出屎篱,到底是詐尸還是另有隱情,我是刑警寧澤葵蒂,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布交播,位于F島的核電站,受9級特大地震影響践付,放射性物質(zhì)發(fā)生泄漏秦士。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一永高、第九天 我趴在偏房一處隱蔽的房頂上張望隧土。 院中可真熱鬧,春花似錦命爬、人聲如沸曹傀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽卖毁。三九已至,卻和暖如春落萎,著一層夾襖步出監(jiān)牢的瞬間亥啦,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工练链, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留翔脱,地道東北人。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓媒鼓,卻偏偏與公主長得像届吁,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子绿鸣,可洞房花燭夜當晚...
    茶點故事閱讀 45,435評論 2 359

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

  • 一疚沐、概述 KVO,即:Key-Value Observing潮模,它提供一種機制亮蛔,當指定的對象的屬性被修改后,則其觀察...
    DeerRun閱讀 10,078評論 11 33
  • 20- 枚舉,枚舉原始值,枚舉相關(guān)值,switch提取枚舉關(guān)聯(lián)值 Swift枚舉: Swift中的枚舉比OC中的枚...
    iOS_恒仔閱讀 2,292評論 1 6
  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉擎厢,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 1,725評論 0 9
  • KVC和KVO在實際的運用中是很常見的究流。所以了解它的底層實現(xiàn)原理是非常不錯的一件事辣吃。 KVC(NSKeyValue...
    HelloAda閱讀 2,509評論 0 3
  • 一、什么是KVO KVO和Notification是Objective-C語言中觀察者模式的兩種實現(xiàn)機制芬探。KVO指...
    坤坤同學(xué)閱讀 286評論 0 0