iOS设计模式3 - 观察者模式_KVO

一、解析

1. KVO

KVO,即:Key-Value Observing,它提供一种机制,当指定的对象的属性被修改后,则对象就会接受到通知。简单的说就是每次指定的被观察的对象的属性被修改后,KVO就会自动通知相应的观察者了。

iOS设计模式3 - 观察者模式_KVO_第1张图片
KVO机制图.png

(NSObject类已实现了NSKeyValueObserving协议,所以不用再声明)

2. KVO的使用步骤

1)通过addObserver: forKeyPath: options: context:为被监听对象(它通常是数据模型)注册监听器
2)重写监听器的observeValueForKeyPath: ofObject: change: context:方法

3. KVO的常用操作方法

  • 注册指定Key路径的监听器: addObserver: forKeyPath: options: context:
  • 删除指定Key路径的监听器: removeObserver: forKeyPath、removeObserver: forKeyPath: context:
  • 回调监听: observeValueForKeyPath: ofObject: change: context:

二、实现

1. 被观察的对象:(self或者其他被观察对象)

//  被观察对象的已有属性:
@property (nonatomic) NSMutableString *str;

//  对该属性添加观察者:
[self addObserver:self.ob  //观察者
       forKeyPath:@"str"   //观察的属性的名称
          options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld//属性变化设置选项
          context:@"pass context"//额外信息
];

2. 观察者,实现相应委托

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object 
change:(NSDictionary *)change context:(void *)context{

    NSLog(@"Property '%@' of object '%@' changed: %@ context: %@",keyPath,object,change,context);
}
  • keyPath参数是被关注的属性
  • object是被关注的对象
  • change是字典类型,包含了属性变化的内容,这些内容与注册时属性变化设置的选项(options参数)有关。
  • context是注册时传递的上下文内容。

你可能感兴趣的:(iOS设计模式3 - 观察者模式_KVO)