KVC即key-value coding的缩写,
KVO即key-value observing的缩写
假如需要掌握Key-Value Observing机制,那么需要阅读本文应该有帮助。本文提供了Key-Value Observing的一个概述,并且解释为什么需要用它,什么时候用它。在阅读本文之前需要对Key-Value Observing需要有一个基本的了解。
Key-Value Observing机制的概述
Key-Value Observing (简写为KVO):当指定的对象的属性被修改了,允许对象接受到通知的机制。每次指定的被观察对象的属性被修改的时候,KVO都会自动的去通知相应的观察者。
KVO的优点
当有属性改变,KVO会提供自动的消息通知。这样的架构有很多好处。首先,开发人员不需要自己去实现这样的方案:每次属性改变了就发送消息通知。这是KVO机制提供的最大的优点。因为这个方案已经被明确定义,获得框架级支持,可以方便地采用。开发人员不需要添加任何代码,不需要设计自己的观察者模型,直接可以在工程里使用。其次,KVO的架构非常的强大,可以很容易的支持多个观察者观察同一个属性,以及相关的值。
KVO如何工作
需要三个步骤来建立一个属性的观察员。理解这三个步骤就可以知道KVO如何设计工作的。
(1)首先,构思一下如下实现KVO是否有必要。比如,一个对象,当另一个对象的特定属性改变的时候,需要被通知到。
例如,PersonObject希望能够觉察到BankObject对象的accountBalance属性的任何变化。
(2)那么PersonObject必须发送一个“addObserver:forKeyPath:options:context:”消息,注册成为BankObject的accountBalance属性的观察者。
(说明:“addObserver:forKeyPath:options:context:”方法在指定对象实例之间建立了一个连接。注意,这个连接不是两个类之间建立的,而是两个对象实例之间建立的。)
(3)为了能够响应消息,观察者必须实现“observeValueForKeyPath:ofObject:change:context:”方法。这个方法实现如何响应变化的消息。在这个方法里面我们可以跟自己的情况,去实现应对被观察对象属性变动的相应逻辑。
(4)假如遵循KVO规则的话,当被观察的属性改变的话,方法“observeValueForKeyPath:ofObject:change:context:”会自动被调用。
后记:本文提供的只是KVO的一个简要概述。KVO很强大很灵活,所以还有很多细节,如自动和手动键值观察,或一对多和一对一的关系