在我们使用kvo时总共是分为三部,第一步是初始化kvo,在就是kvo的触发方法,最后是监听属性。下面我就对以上的几个步骤进行底层分析。
先来讲讲我们的第一步初始化kvo。在初始kvo这一过程做了什么了?看下图
这是创建KVO之前和创建之后,lab这个被观察对象的isa的不同。创建kvo后isa变为了NSKVONotiying_UILabel从这里可以看出我们的被观察者这个过程中添加了一下新的东西。那他在这一过程具体做了什么了,请看下面的过程。
我理解就是在初始化kvo中我们的被观察者会被继承NSKVONotiying_UILabel这个类。而观察者穿进来是用来做类似设置代理一样的形式,因为我们的触发方法是在观察者这个类中进行的。观察的值是用来设置观察的属性,只有对应上了要观察的属性才会去触发回掉方法。下面是我写的一个实际的例子用来模仿底层实现步骤:
首先就是初始化kvo,我这里用到的是代理回调
//触发
//在这里执行了
在这里初始化KVO的作用就是让我们的被观察者对象继承NSKVONotiying_UILabel类,在通过我们的被观察者属性的set方法去调用触发方法在回调到观察者类中(观察者就是用来确定在哪里回调)。Kvo的初始化就帮我们把个路径连接好。
这是仿照kvo底层写的代码https://github.com/tangyi1234/kvo.git
网友评论