一、观察者模式简介
在观察者模式中,一个对象的某个状态发生改变时,都会通知另外的对该改变感兴趣的对象。这些对象之间不需要知道彼此的存在,这其实是一种松耦合的设计。观察者注册自己感兴趣的对象的状态变更事件,当被观察者状态发生变化的时候,所有的观察者都会得到通知。
二、Notifications
NSNotificetioncCenter: 每个应用程序都有一个通知中心,用来协调不同对象之间的消息通信,一个完整的通知需要包含三要素:
name:通知名字
id:发布者
userinfo:通知携带的信息内容
2.1、发布通知
[[NSNotificationCenter defaultCenter] postNotificationName:@"tzname" object:self userInfo:@{ @"title" : @"两会Duang开始了"}];
2.2、监听通知
监听通知一定要在发布通知之前,否则,会导致,一个通知已经发出了,但是漏监听了,当监听到一个通知的时候,可以读取这个通知的NSNotification报信息
[[NSNotificationCenter defaultCenter] addObserver:listener selector:@selector(dowhat:) name:@"tzname1" object:sender1]
2.3、移除监听(一般在dealloc中移除监听)
当一个对象在销毁之前,必须先移除自己所有的监听,因为NSNotificationCenter不会理会对象是否存在,就会直接把通知传送过去,如果对象已经被销毁,但是监听依然存在,程序就会奔溃
[[NSNotificationCenter defaultCenter] removeObserver:self]
三、KVO
在ObjC中使用KVO操作常用的方法如下:
- 注册指定Key路径的监听器: addObserver: forKeyPath: options: context:
- 删除指定Key路径的监听器: removeObserver: forKeyPath、removeObserver: forKeyPath: context:
- 回调监听: observeValueForKeyPath: ofObject: change: context: