观察者模式(一对多)

一、观察者模式简介

在观察者模式中,一个对象的某个状态发生改变时,都会通知另外的对该改变感兴趣的对象。这些对象之间不需要知道彼此的存在,这其实是一种松耦合的设计。观察者注册自己感兴趣的对象的状态变更事件,当被观察者状态发生变化的时候,所有的观察者都会得到通知。

二、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: forKeyPathremoveObserver: forKeyPath: context:
  • 回调监听: observeValueForKeyPath: ofObject: change: context:

原文地址:https://www.cnblogs.com/hepingqingfeng/p/5462698.html