KVO的全称是Key-Value Observing,它实现了一种机制,对所关心的属性对象添加观察者,当属性值发生变化时会得到通知,我们可以对变化做相应的处理。看过设计模式的同学应该知道,这是一种典型的观察者模式。KVO的最大优点就是底层框架已经支持,开发人员不需要实现属性值发生变化时发送通知的方案,这样就大大减少开发的工作量。其次,KVO框架很强大,可以支持多个观察者观察同一属性,或者一个观察者监听不同属性。
KVO的使用比较简单,基本上都是三步:
1.注册观察者
addObserver:forKeyPath:options:context:
2.观察者中实现
observeValueForKeyPath:ofObject:change:context:
3.移除观察者
removeObserver:forKeyPath:
//通知 注意postNotificationName 必须一致 [[NSNotificationCenter defaultCenter] postNotificationName:NotificationName object:self userInfo:dic]; //dic存放在userinfo中 dic中存放要传过去的值是个字典//接受通知 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changeAction:) name:NotificationName object:nil];//KVO监听/*KVO观察者方法 keyPath: 监听的属性名 object: 被观察的对象 change: 属性值 context: 上下设备文 */ [registerCtrl addObserver:self forKeyPath:@"属性名称1" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:nil]; [registerCtrl addObserver:self forKeyPath:@"属性名称2" options:NSKeyValueObservingOptionNew context:nil];//触发的事件- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { //object的值是registerCtrl if ([keyPath isEqualToString:@"属性名称1"]) { }else if ([keyPath isEqualToString:@"属性名称2"]) { } }