探讨KVO的底层原理和自定义KVO

一、KVO的理解

1.KVO(键值监听)即Key-Value-Observing,是Objective-C对观察者设计模式的一种实现,那么它的工作原理就是对一个指定的被观察对象(例如Person类),当Person的属性name的发生了改变时,那么此时监听对象就会获得通知,并作出相应的处理。

二、代码分析


探讨KVO的底层原理和自定义KVO_第1张图片
图1


探讨KVO的底层原理和自定义KVO_第2张图片
图2


探讨KVO的底层原理和自定义KVO_第3张图片
图3

代码实现思路:图1中对Person类的属性name进行键值观察,通过图3点击模拟器屏幕来修改name的值,然后在图2中的监听方法里打印name变化的值。


二、KVO底层实现原理(以Person类为例)    

    1.自定义Person类的子类,即派生出NSKVONotifying_Person这个类


探讨KVO的底层原理和自定义KVO_第4张图片
图4

    2.重写setName:方法,在内部恢复父类做法,通知观察者

    3.如何让外界调用自定义Person的子类方法,修改当前对象的isa指针,指向自定义的子类!


三、自定义KVO


图5


探讨KVO的底层原理和自定义KVO_第5张图片
图6


探讨KVO的底层原理和自定义KVO_第6张图片
图7

你只要理解了KVO到底干了啥,那你就能对自定义的KVO有个很好的理解!

我是新手,如有不对的地方,欢迎大家指正,大家一起共同进步!谢谢!

你可能感兴趣的:(探讨KVO的底层原理和自定义KVO)