iOS开发--广播通知

  • iOS 提供了一种 "同步的" 消息通知机制,观察者只要向消息中心注册, 即可接受其他对象发送来的消息,消息发送者和消息接受者两者可以互相一无所知,完全解耦。这种消息通知机制可以应用于任意时间和任何对象,观察者可以有多个,所以消息具有广播的性质,只是需要注意的是,观察者向消息中心注册以后,在不需要接受消息时需要向消息中心注销,这种消息广播机制是典型的“Observer”模式。
  • 使用场合:
    消息机制常常用于在向服务器端请求数据或者提交数据的场景,在和服务器端成功交互后,需要处理服务器端返回的数据,或发送响应消息等,就需要用到消息机制。
  • 使用消息机制的步骤:
    (1)观察者注册消息通知
// 在需要接收通知消息的.m文件中写入
 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(logOutSuccess:)  name:@"isLogOutSuccess" object:nil];

notificationObserver 观察者 : self

notificationSelector 处理消息的方法名: logOutSuccess:
notificationName 消息通知的名字: isLogOutSuccess

notificationSender 消息发送者 : 表示接收哪个发送者的通知,如果第四个参数为nil,接收所有发送者的通知
(2) 发送消息通知

// 在需要发送数据的.m文件中写入
[[NSNotificationCenter defaultCenter] postNotificationName:@"isLogOutSuccess" object:returnMsg];
// 这个比第一个多了个参数就是userInfo(参数类型是字典)
[[NSNotificationCenter defaultCenter] postNotificationName:@"isLogOutSuccess" object: returnMsg userInfo:[NSDictionary dictionaryWithObject:@"value" forKey:@"key"]];

notificationName 消息通知的名字: isLogOutSuccess
notificationSender 消息发送者: returnMsg
userInfo 消息传递的数据信息:可以写入nil
(3)观察者处理消息

// 在注册通知的控制器中写入该方法
  -(void) isLogOutSuccess:(NSNotification*)notification{
     NSString *nameString = [notification name];
     NSString *objectString = [notification object];
     NSDictionary *dictionary = [notification userInfo];为nil要有这行代码哦
   // 当你拿到这些数据的时候你可以去做一些操作
}

NSNotification 接受到的消息信息,主要含:

Name: 消息名称 isLogOutSuccess
object: 消息发送者 returnMsg

userInfo: 消息传递的数据信息

观察者注销,移除消息观察者

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

  • 注销观察者有2个方法:
    1、 最优的方法,在 UIViewController.m 中:
 -(void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
 If you see the method you don't need to call [super dealloc]; here, only the method without super dealloc needed.

2、单个移除

[[NSNotificationCenter defaultCenter] removeObserver:self name:@"isLogOutSuccess" object:nil];
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 概述 在多数移动应用中任何时候都只能有一个应用程序处于活跃状态,如果其他应用此刻发生了一些用户感兴趣的那么通过通知...
    莫离_焱阅读 6,549评论 1 8
  • iOS 提供了一种 “同步的” 消息通知机制NSNotificationCenter,观察者只要向消息中心注册, ...
    MasterChen阅读 2,243评论 4 16
  • NSNotificationCenter对象(通知中心)提供了在程序中广播消息的机制,它实质上就是一个通知分发表。...
    9de75b652cd9阅读 763评论 0 1
  • 转载自南峰子的技术博客 一个NSNotificationCenter对象(通知中心)提供了在程序中广播消息的机制,...
    我消失1314阅读 911评论 0 2
  • 那日,妍儿问我,:这一生要走多远多久。我没有回答她,我也不知道要走多久。流年似水,光阴似箭。谁也没有办法判定...
    薄荷九阅读 722评论 1 2