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

一、解析

1. KVO

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

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是注册时传递的上下文内容。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 将心血埋葬,将骨灰撒于天空,将皮肤绘出图案,路人难懂。 将灵魂寄予地狱,将希望的美景托付于投胎,将死亡看作一次最奢...
    渡过活口阅读 2,972评论 0 0
  • “长亭外,古道边,芳草碧连天。 晚风拂柳笛声残,夕阳山外山。 天之涯,地之角,知交半零落。 人生难得是欢聚,唯有别...
    自律的人生才自由阅读 3,138评论 0 1
  • 一 天乐幼儿园第三届亲子趣味运动会圆满结束。我作为孩子家长全程参与了这场运动会。其实,我很羡慕现在的孩子,这么小就...
    不爱西风阅读 7,802评论 3 6