KVO的实现原理

267 阅读1分钟


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

   4. 重写了dealloc做一些 KVO 内存释放