由于本人最近想换工作,趁此机会一一写下,希望在自己回顾的过程中可以帮到大家。
1.KVO实现原理
想知道原理,那你首先得知道KVO是什么啊?对不对。
KVO(key-value-observing)
简单的来说,就是一个对象注册了一个监听者,当对象的属性发生变化时,监听作出相应的动作。
2.KVO的使用非常简单
addObserver:forKeyPath:options:context:
使用该方法,需要对 观察的对象 注册一个观察者。
在这里估计有疑问的是options:一共有四个
1.NSKeyValueObservingOptionNew
:当options中包括了这个参数的时候,观察者收到的change参数中就会包含NSKeyValueChangeNewKey和它对应的值,也就是说,观察者可以得知这个property在被改变之后的新值。
2.NSKeyValueObservingOptionOld
:和NSKeyValueObservingOptionNew的意思类似,当包含了这个参数的时候,观察者收到的change参数中就会包含NSKeyValueChangeOldKey和它对应的值。
3.NSKeyValueObservingOptionInitial
:当包含这个参数的时候,在addObserver的这个过程中,就会有一个notification被发送到观察者那里,反之则没有。
4. NSKeyValueObservingOptionPrior
:当包含这个参数的时候,在被观察的property的值改变前和改变后,系统各会给观察者发送一个change notification;在property的值改变之前发送的change notification中,change参数会包含NSKeyValueChangeNotificationIsPriorKey并且值为@YES,但不会包含NSKeyValueChangeNewKey和它对应的值。
其实单纯的看这个KVO 是非常简单的东西,但是我们在使用的过程中需要察觉到,这个东西是不是跟 KVC的名字很像,那么他们有关系吗。还有,KVO和通知有什么区别呢? 这些问题大家是否都有讨论过呢。