OC对象 – KVO

💡 原文中文,约4400字,阅读约需11分钟。
📝

内容提要

OC对象-KVO是用来监听特定值改变的机制。文章介绍了KVO的基本运用和底层实现。通过代码示例和运行结果,说明了增加KVO监听的目标和未增加的目标的差异。底层实现中,通过动态生成子类和改变isa指向来实现KVO。文章还介绍了NSSetXXXValueAndNotify方法的伪代码和NSKVONotifying_ClassName类的其他方法。最后,提到了手动触发KVO监听的方法。

🎯

关键要点

  • KVO是用来监听特定值改变的机制,俗称“键值监听”。
  • 创建iOS项目,定义ZSXPerson类并实现KVO监听age属性的变化。
  • 通过点击屏幕修改age值,触发KVO监听并输出变化信息。
  • 增加KVO监听后,setAge方法的实现地址发生变化,未增加监听的对象方法地址不变。
  • KVO监听通过动态生成子类和改变isa指向实现,监听对象的isa指向NSKVONotifying_ClassName。
  • 调用setAge方法时,_NSSetXXXValueAndNotify函数会被调用,执行willChangeValueForKey和didChangeValueForKey。
  • NSKVONotifying_ClassName类中重写了class方法,返回原类名以避免开发者看到异常。
  • 手动触发KVO监听需要调用willChangeValueForKey和didChangeValueForKey方法,直接赋值不会触发KVO。
➡️

继续阅读