/**
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的意思 指向維護分發表的物件的類。該分發表實際上包含了指向實現類中的方法的指標,...