KVO底層實現(xiàn)原理

添加觀察者方法實現(xiàn)原理

#import "NSObject+KVO.h"
#import "XMKVONotifying_Person.h"
#import <objc/runtime.h>

@implementation NSObject (KVO)

-(void)XM_addObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath options:      (NSKeyValueObservingOptions)options context:(void *)context
{
 //1.動態(tài)創(chuàng)建NSKVONotifying_Person,NSKVONotifying_Person是Person子類,做KVO
 //2.修改當前對象的isa指針->NSKVONotifying_Person
 //3.只要調(diào)用對象的set,就會調(diào)用NSKVONotifying_Person的set方法
 //4.重寫NSKVONotifying_Person的set方法,1.[super set:] 2.通知觀察者,告訴你屬性改變

 //修改isa,本質(zhì)就是改變當前對象的類名
object_setClass(self, [XMKVONotifying_Person class]);

把觀察者保存到當前對象里
// 添加關(guān)聯(lián)
// id object:給哪個對象添加關(guān)聯(lián)屬性
// key:屬性名
// value:關(guān)聯(lián)值
objc_setAssociatedObject(self, @"key", observer, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}


#import "XMKVONotifying_Person.h"
#import <objc/runtime.h>

@implementation XMKVONotifying_Person

監(jiān)聽方法自動調(diào)用實現(xiàn)原理

-(void)setAge:(NSInteger)age
{
[super setAge:age];

// 通知觀察者,屬性改變
id observer = objc_getAssociatedObject(self, @"key");

[observer observeValueForKeyPath:@"age" ofObject:self change:nil context:nil];
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末舀患,一起剝皮案震驚了整個濱河市断部,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蹦哼,老刑警劉巖励饵,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件荷逞,死亡現(xiàn)場離奇詭異核偿,居然都是意外死亡,警方通過查閱死者的電腦和手機紫皇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來腋寨,“玉大人聪铺,你說我怎么就攤上這事√汛埽” “怎么了铃剔?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長查刻。 經(jīng)常有香客問我键兜,道長,這世上最難降的妖魔是什么穗泵? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任普气,我火速辦了婚禮,結(jié)果婚禮上火欧,老公的妹妹穿的比我還像新娘棋电。我一直安慰自己,他們只是感情好苇侵,可當我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布赶盔。 她就那樣靜靜地躺著,像睡著了一般榆浓。 火紅的嫁衣襯著肌膚如雪于未。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天,我揣著相機與錄音烘浦,去河邊找鬼抖坪。 笑死,一個胖子當著我的面吹牛闷叉,可吹牛的內(nèi)容都是我干的擦俐。 我是一名探鬼主播,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼握侧,長吁一口氣:“原來是場噩夢啊……” “哼蚯瞧!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起品擎,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤埋合,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后萄传,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體甚颂,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年秀菱,在試婚紗的時候發(fā)現(xiàn)自己被綠了振诬。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡答朋,死狀恐怖贷揽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情梦碗,我是刑警寧澤禽绪,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站洪规,受9級特大地震影響印屁,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜斩例,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一雄人、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧念赶,春花似錦础钠、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至停局,卻和暖如春很钓,著一層夾襖步出監(jiān)牢的瞬間香府,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工码倦, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留企孩,地道東北人。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓袁稽,卻偏偏與公主長得像勿璃,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子推汽,可洞房花燭夜當晚...
    茶點故事閱讀 45,086評論 2 355

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