1.什么是kvo?
-
KVO
全称KeyValueObserving
,是苹果提供的一套事件通知机制。允许对象监听另一个对象特定属性的改变,并在改变时接收到事件。一般继承自NSObject的对象都默认支持KVO。 -
KVO
和NSNotificationCenter
都是iOS中观察者模式的一种实现。区别在于,相对于被观察者和观察者之间的关系,KVO是一对一的,而不一对多的。KVO对被监听对象无侵入性,不需要修改其内部代码即可实现监听。 - KVO可以监听单个属性的变化,也可以监听集合对象的变化。通过KVC的
mutableArrayValueForKey
等方法获得代理对象,当代理对象的内部对象发生改变时,会回调KVO监听的方法。集合对象包含NSArray和NSSet。
2.如何使用kvo?
使用KVO分为三个步骤:
- 通过
addObserver:forKeyPath:options:context:
方法注册观察者,观察者可以接收keyPath
属性的变化事件。 - 在观察者中实现
observeValueForKeyPath:ofObject:change:context:
方法,当keyPath
属性发生改变后,KVO会回调这个方法来通知观察者。 - 当观察者不需要监听时,可以调用
removeObserver:forKeyPath:
方法将KVO移除。需要注意的是,调用removeObserver需要在观察者消失之前,否则会导致Crash。
网友评论