KVO的实现原理:
当某个类的对象第一次被观察时,系统就会在运行时动态地创建该类的一个派生类,在这个派生类中重写原类中被观察属性的
setter
方法
,
派生类在被重写的
setter
方法实现真正的通知机制
(Person->NSKVONotifying_Person).
派生类重写了
class
方法以
“
欺骗
”
外部调用者它就是起初的那个类。然后系统将这个对象的
isa
指针指向这个新诞生的派生类,因此这个对象就成为该派生类的对象了,因而在该对象上对
setter
的调用就会调用重写的
setter
,从而激活键值通知机制。此外,派生类还重写了
dealloc
方法来释放资源。
KVO的使用场景:
1.
实现上下拉刷新控件
content offset
2.webview
混合排版
content size
3.
监听模型属性实时更新UI