iOS程序员iOS程序猿

设计模式--通知中心(广播设计模式)

2017-10-20  本文已影响51人  Cy_Star

1、通知中心(NSNotificationCenter)

  通知中心 :任意一个发送者可以发送 消息/广播 给任意一个接收者(听众),
  这就是通知中心的一个主要作用
 (如:需要在多个页面/对象 传递参数,通知中心就是其中一种传递方式)

2、创建通知中心

//1、取得通知中心
NSNotificationCenter * nc = [NSNotificationCenter defaultCenter];

3、发送消息(NSNotification)

 -(void)looper;
- (void) inform_center;


-(void)looper
{
   // 启动一个定时器 循环发送广播
   [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(inform_center) userInfo:nil repeats:YES];

}

- (void) inform_center
{
  //1、取得通知中心
  NSNotificationCenter * nc = [NSNotificationCenter defaultCenter];

  //2、时间戳,做定时循环广播
  static int i;
  NSString * count = [NSString stringWithFormat:@"Audience %d",i++];
  NSDictionary * dic = [NSDictionary dictionaryWithObjectsAndKeys:@"Inform_center", @"name", count, @"Value", nil];

  //消息内容
  //1、发送广播
  [nc postNotificationName:@"Inform" object:self userInfo:dic];
  /*
    可获取的方法
    name:(NString *) -- 通知中心消息的名字,带着参数object:
    object:(id) 消息的对象
    userInfo:(NSDictionary) 消息中可以带的参数
  */
}

4、接收消息(NSNotification)

 // 接收消息是一个回调机制,要注册接收哪个消息,
 如果这个消息得到了响应,在对象当中就能够回调接收消息的方法

-(void) Listen;

-(void) Listen
{

  //1、注册
  [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(recvIform:) name:@"Inform" object:nil];

  /* \ 只要是这个广播:(name:@"Inform"),addObserver: self 就调用
   selector: (recvIform:)这个方法,
   addObserver:self selector:@selector(recvIform:) == [self recvIform];
 
   object: 一般都设为nil,这样就等于不用指定的广播站就可以收听 “Iform” 这个频段的广播
    注意:name:@"Inform" 必须跟 [nc postNotificationName:@"Inform" object:self userInfo:dic]; 的 postNotificationName:@"Inform"保持一致,
    可以说是发送频道跟接收频道保持一致才能互通,听众才可以听到广播发出的通知。
  */

}

//2、接收广播数据
-(void)recvIform:(NSNotification *) nc{

  //nc : 具体的广播消息

  NSString * name = nc.name;

  NSLog(@"name is %@",name);
  NSLog(@"nc is %@",nc);
}

5、使用

// 创建广播站
Inform * inf = [[Inform alloc]init];
[inf looper]; // 调用循环的广播

//听众
Audience * aud = [[Audience alloc]init];
[aud Listen];//听广播

[[NSRunLoop currentRunLoop] run];
//
输出接收到的消息.png
上一篇下一篇

猜你喜欢

热点阅读