
KVO-键值观察机制,原理如下:
- 当给A类添加KVO的时候,runtime动态的生成了一个子类NSKVONotifying_A,让A类的isa指针指向NSKVONotifying_A类,重写class方法,隐藏对象真实类信息
- 重写监听属性的setter方法,在setter方法内部调用了Foundation 的 _NSSetObjectValueAndNotify 函数
- _NSSetObjectValueAndNotify函数内部
- 首先会调用 willChangeValueForKey
- 然后给属性赋值
- 最后调用 didChangeValueForKey
- 最后调用 observer 的 observeValueForKeyPath 去告诉监听器属性值发生了改变
4. 重写了dealloc做一些 KVO 内存释放