iOS设计模式2 - 观察者模式_通知机制

一、解析

1. NSNotificationCenter

NSnotificationCenter是一种典型的有调度中心的观察者模式实现方式。以NSNotificationCenter为中心,观察者往Center中注册对某个主题对象的变化感兴趣,主题对象通过NSNotificationCenter进行变化广播。这种模型就是文章开始发布订阅报纸在OC中的一种类似实现。所有的观察和监听行为都向同一个中心注册,所有对象的变化也都通过同一个中心向外广播。

通知机制.png

特点:“一对多”

2. 通知机制

在通知机制中对某个通知感兴趣的所有对象都可以成为接收者。
首先,这些对象需要对通知中心(NSNotificationCenter)发出addObserver:selector:name:object:消息进行注册,在投送对象投
送通知给通知中心时,通知中心就会把通知广播给注册过的接收者。所有的接收者都不知道通知是谁投送的,更不关心它的细节。投送对象与接收者是一对多的关系。接收者如果对通知不再关注,会给通知中心发出
removeObserver:name:object:消息解除注册,以后不再接收通知。

通知机制图.png

二、实现

1. 观察者所在类

1)注册观察者:(一般在viewDidLoad方法中实现)

  //name为通知名,作为区分
  [[NSNotificationCenter defaultCenter]  addObserver:self
                                            selector:@selector(handleAction:)
                                                name:@"test"
                                              object:nil];
]
  • observer:监听器,即谁要接收这个通知
  • Selector:收到通知后,回调监听器的这个方法,并且把通知对象当做参数传入
  • Name:通知的名称。如果为nil,那么无论通知的名称是什么,监听器都能收到这个通知
  • Object:通知发布者。如果Object和Name都为nil,监听器都收到所有的通知

2)接收广播后的处理

-(void)handleAction:(NSNotification*)notification
{
  //获取userinfo
  NSDictionary *theData = [notification userInfo];
  
  //[notification object] 可获取post的object对象

  //作出反应
  if (theData !=nil) {
    NSString *data =
    [theData objectForKey:@"testKey"];
    NSLog(@"FlipsideViewController App Terminate Date: %@", data);
  }
}

3)解除注册(一般在dealloc方法中解除=注册)

-(void)dealloc{
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

2. 被观察的对象

通过postNotificationName:object:userInfo:发送某一类型通知,广播改变。

//传递的数据
NSDictionary *dataDict = [NSDictionary dictionaryWithObject:self.testTextField.text forKey:@"testKey"];
//发出通知(广播)
[[NSNotificationCenter defaultCenter] postNotificationName:@"test"
                                                    object:self
                                                  userInfo:dataDict];

一个通知对象要包含的内容:

    1. (NSString *)name; // 通知的名称
    1. (id)object; // 发送对象类型数据,如果接收者不需要,可设为nil
    1. (NSDictionary
      *)userInfo; // 一些额外的信息(通知发布者传递给通知接收者的信息内容)

补充,可以参考:http://www.th7.cn/Program/IOS/201406/212434.shtml

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

推荐阅读更多精彩内容

  • 观察者模式也叫发布/订阅模式,是软件设计模式中的一种。在这种模式中,一个目标物件管理所有相依于它的观察者物件,并且...
    蜗牛非牛阅读 1,604评论 1 6
  • 通知机制 基本概念 通知中心(NSNotificationCenter) 每一个应用程序都有一个通知中心(NSNo...
    iOS_Cqlee阅读 554评论 1 7
  • KVO与通知都可实现观察者模式。 一、通知简介 NSNotificationCenter是一个消息通知机制,类似广...
    f1e583c455bf阅读 933评论 0 1
  • 【前言介绍】 iOS的一种设计模式,观察者Observer模式(也叫发布/订阅,即Publich/Subscrib...
    啊左阅读 6,135评论 18 50
  • 每一个应用程序都有一个通知中心(NSNotificationCenter)实例,专门负责协助不同对象之间的消息...
    蓝心儿的蓝色之旅阅读 322评论 0 0