KVO 實現原理

2021-08-02 15:47:03 字數 1235 閱讀 9012

/**

1. self.person:要監聽的物件

2. 引數說明:

* @param addobserver 觀察者,負責處理監聽事件的物件

* @param forkeypath 要監聽的屬性

* @param options 觀察的選項(觀察新、舊值,也可以都觀察)

* @param context 上下文,用於傳遞資料,可以利用上下文區分不同的監聽

*/[self.person addobserver:self forkeypath:@"name"

options:nskeyvalueobservingoptionnew | nskeyvalueobservingoptionold context:@"person name"];

/** * 當監控的某個屬性的值改變了就會呼叫

* * @param keypath 監聽的屬性名

* @param object 屬性所屬的物件

* @param change 屬性的修改情況(屬性原來的值`oldvalue`、屬性最新的值`newvalue`)

* @param context 傳遞的上下文資料,與監聽的時候傳遞的一致,可以利用上下文區分不同的監聽

*/- (void)observevalueforkeypath:(nsstring *)keypath ofobject:(id)object change:(nsdictionary *)change context:(void *)context

kvo 是 objective-c 對觀察者模式(observer pattern)的實現。也是 cocoa binding 的基礎。當被觀察物件的某個屬性發生更改時,觀察者物件會獲得通知。

有意思的是,你不需要給被觀察的物件新增任何額外**,就能使用 kvo 。這是怎麼做到的?

手動觸發乙個value的kvo.png

主要分為三大步

KVO實現原理

kvo的執行原理是基於執行時的 當乙個物件註冊了監聽者以後 程式執行時就會動態的建立被監聽者的乙個子類 nskvonotifying 建立該子類的物件 kvo只能監聽物件屬性通過setter方法改變時監聽 1 當乙個object有觀察者時,動態建立這個object的類的子類 2 對於每個被觀察的pr...

KVO實現原理

kvo 的全稱是 key value observing 俗稱 鍵值監聽 可以用於監聽某個物件屬性值的改變。下面來 一下kvo的本質 1.新建乙個xzperson類 import inte ce xzperson nsobject property nonatomic,assign int age ...

kvo實現原理 KVC KVO實現原理

一 kvc運用了乙個isa swizzling技術。isa swizzling就是型別混合指標機制。kvc主要通過isa swizzling,來實現其內部查詢定位的。isa指標,如其名稱所指,就是is a kind of的意思 指向維護分發表的物件的類。該分發表實際上包含了指向實現類中的方法的指標,...