當前位置:
首頁 >
KVO本质
發布時間:2025/6/15
30
豆豆
2019獨角獸企業重金招聘Python工程師標準>>>
kvo監聽的原理是利用監聽對象的set方法,但是如何才能監聽的到對象內部的set方法呢,如下圖
創建一個Person對象,給他添加觀察者,添加觀察者前它的isa指針指向的是Person類,接下來看添加后
添加觀察者后p對象的類型改變了,被系統替換成了NSKVONotifying_Person,
也就是說,系統創建了一個Person類的子類NSKVONotifying_Person替換原有對象,并在其內部重寫了它的name 的set方法(同時也會調用它的super set方法),在里面添加了監聽,所以每次改變name屬性,即調用set方法都會被監聽到。然后再去通知觀察者
由此可見
被觀察者被系統替換成了子類。系統重寫了相應的set方法實現監聽
同時也需要注意,只有調用了set方法,才能被監聽到,如果是直接改變內部成員變量的值(_name = @""....)則不能被監聽到,因為沒有調用set方法。
?
轉載于:https://my.oschina.net/dahuilang123/blog/796394
總結
- 上一篇: 设计模式5 行为模式
- 下一篇: 润乾实现简单自定义动态列报表