KVO用法總結

iOS用什麼方式實現對一個對象的KVO?(KVO的本質是什麼?)

1>利用RuntimeAPI動態生成一個子類,並且讓instance對象的isa指向這個全新的子類
2>當修改instance對象的屬性時,會調用Foundation的NSSetxxxValueAndNotify函數
✔️willChangeValueForKey
✔️父類原來的setter
✔️didChangeValueForKey
· 內部會觸發監聽器(Oberser)的監聽方法(observerValueForKeyPath: ofObject: context: )

手動觸發KVO的方法:
1>手動調用willChangeValueForKey: 和 didChangeValueForKey:
直接修改成員變量會觸發KVO嗎?
1>不會觸發KVO。

代理的效率要高於KVO,KVO需要動態創建一些東西,代理不需要
KVO主要是監聽對象的屬性
KVO監聽時系統會使用runtime動態創建一個類(NSKVONotifying_MJPerson)
沒有監聽情況下改變屬性age的值會調用類對象裏的set方法,KVO監聽的情況下改變屬性age的值會動態創建一個類調用這個類裏面的set方法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章