KVO机制允许一个对象的指定属性的值改变时可以通知其它监听者。
这种机制在MVC程序构架中非常有用:
控制器监听模型的属性。如果控制器监听到模型中的属性变化了,那么控制器就通知视图更新显示。
一个模型对象也可以是其它模型对象的监听者,甚至一个对象也可以监听它自己的属性。
一个对象的属性可以被多个对象监听,当属性的值改变了,该属性所有的监听者都会收到通知。
使用KVO机制可以很方便的实现观察者模式。
使用KVO:
1. 假设如下情形:
@interface BankObject : NSObject {
}
@property(assign) NSIntger accountBalance;
@end
@interface PersonObject : NSObject {
}
当 accountBalance 的值发生变化时,一个 PersonObject 希然收到通知。
2. PersonObject 对象注册为 BankObject 对象的 accountBalance 属性的监听者。
[bankInstance addObserver:personInstance forKeyPath:@"accountBalance" options:NSKeyValueObservingOptionNew context:NULL];
3. 在 PersonObject 中响应通知
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
if ([keyPath isEqualToString:@"accountBalance"]) {
// TODO: Add your code here...
}
}
当 BankObject 的 accountBalance 的值变化时, observeValueForKeyPath:ofObject:change:context:方法会自动被调用。