iOS 广播小结

来源:互联网 发布:合肥网络推广公司 编辑:程序博客网 时间:2024/06/03 02:26

广播小结
Notification

iOS 提供了一种 "同步的" 消息通知机制:
观察者只要向消息中心注册, 即可接受其他对象发送来的消息,消息发送者和消息接受者两者可以互相一无所知,完全解耦。
这种消息通知机制可以应用于任意时间和任何对象,观察者可以有多个,所以消息具有广播的性质,只是需要注意的是,观察者向消息中心注册以后,在不需要接受消息时需要向消息中心注销,这种消息广播机制是典型的“Observer”模式。
这个要求其实也很容易实现. 每个运行中的application都有一个NSNotificationCenter的成员变量,它的功能就类似公共栏. 对象注册关注某个确定的notification(比如:如果有人捡到一只小狗,就去告诉我). 我们把这些注册对象叫做 observer. 其它的一些对象会给center发送notifications(我捡到了一只小狗). center将该notifications转发给所有注册对该notification感兴趣的对象. 我们把这些发送notification的对象叫做 poster

在不相关的两部分代码中要想进行消息传递,通知(notifacation)是非常好的一种机制,它可以对消息进行广播。特别是想要传递丰富的信息,并且不一定指望有谁对此消息关心。
 
通知可以用来发送任意的消息,甚至包含一个userInfo字典,或者是NSNotifacation的一个子类。通知的独特之处就在于发送者和接收者双方并不需要相互知道。这样就可以在非常松耦合的模块间进行消息的传递。记住,这种消息传递机制是单向的,作为接收者是不可以回复消息的
步骤如下:
1.1.创建一个通知对象:
  //创建通知
    NSNotification * notification=[NSNotification notificationWithName:@"changColor" object:oneColor];
  //通过通知中心发送通知
  [[NSNotificationCenter defaultCenter]postNotificationName:@"changColor" object:oneColor];
    
 1.2.类方法发送通知:
     //发送一个广播,广播携带参数    
   [[NSNotificationCenter defaultCenter]postNotificationName:@"changColor" object:oneColor];


Name 消息通知的名字: changeColor
Object: 消息发送者: oneColor




2.注册通知:

 //观察者注册通知
    [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(needchangecolor: ) name:@“changecolor” object:nil];

Observer 观察者 : self
Selector 处理消息的方法名: needChangeColor:
Name 消息通知的名字: @“changecolor”
Object 消息发送者 : (一个参数)一般传递发送对象,

上面代码的意义的,观察者 self   在收到名为 changeColor 的事件时执行 @selector(needchangecolor: ) ,最后一个参数是表示会对哪个发送者对象发出的事件作出响应,nil 时表示接收所有发送者的事件。




3. 观察者注销,移除消息观察者(移除通知)
注销观察者有2个方法:
a. 最好的方法,在 UIViewController.m 中:
-(void)dealloc{
    [[NSNotificationCenter defaultCenter]removeObserver:self];
    [super dealloc];
}
b. 单个移除:
[[NSNotificationCenter defaultCenter]removeObserver:self name:@"changeColor" object:nil];

虽然在 IOS 用上 ARC 后,不显示移除 NSNotification Observer 也不会出错,但是这是一个很不好的习惯,不利于性能和内存。

0 0
原创粉丝点击