IOS 消息机制(NSNotificationCenter)

转载 2016年08月30日 17:29:39

消息机制 NSNotificationCenter 一直都在频繁使用,但是却对其原理不是十分了解。今天就花些时间,把消息机制原理重头到尾好好过一遍。
iOS 提供了一种 "同步的" 消息通知机制,观察者只要向消息中心注册, 即可接受其他对象发送来的消息,消息发送者和消息接受者两者可以互相一无所知,完全解耦。
这种消息通知机制可以应用于任意时间和任何对象,观察者可以有多个,所以消息具有广播的性质,只是需要注意的是,观察者向消息中心注册以后,在不需要接受消息时需要向消息中心注销,这种消息广播机制是典型的“Observer”模式。
这个要求其实也很容易实现. 每个运行中的application都有一个NSNotificationCenter的成员变量,它的功能就类似公共栏. 对象注册关注某个确定的notification(如果有人捡到一只小狗,就去告诉我). 我们把这些注册对象叫做 observer. 其它的一些对象会给center发送notifications(我捡到了一只小狗). center将该notifications转发给所有注册对该notification感兴趣的对象. 我们把这些发送notification的对象叫做 poster
消息机制常常用于在向服务器端请求数据或者提交数据的场景,在和服务器端成功交互后,需要处理服务器端返回的数据,或发送响应消息等,就需要用到消息机制。
使用消息机制的步骤:

1. 观察者注册消息通知

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(getUserProfileSuccess:) name:@"Notification_GetUserProfileSuccess" object:nil];

notificationObserver 观察者 : self
notificationSelector 处理消息的方法名: getUserProfileSuccess 
notificationName 消息通知的名字: Notification_GetUserProfileSuccess
notificationSender 消息发送者 : 表示接收哪个发送者的通知,如果第四个参数为nil,接收所有发送者的通知

 

2. 发送消息通知

//UserProfile Is A Model
//@interface UserProfile : NSObject

[[NSNotificationCenter defaultCenter] postNotificationName:@"Notification_GetUserProfileSuccess" object:userProfile userInfo:nil];

notificationName 消息通知的名字: Notification_GetUserProfileSuccess

notificationSender 消息发送者: userProfile

 

3. 观察者处理消息 

复制代码
- (void) getUserProfileSuccess: (NSNotification*) aNotification
{
self.userProfile = [aNotification object];

lblName.text = self.userProfile.Name;
lblEENO.text = self.userProfile.EENO;
lblNric.text = self.userProfile.NRIC;
lblBirthday.text =self.userProfile.Birthday;
lblHireDate.text = self.userProfile.Hiredate;

txtMobilePhone.text = self.userProfile.Mobile;
txtEmail.text = self.userProfile.Email;
}
复制代码

 

NSNotification 接受到的消息信息,主要含:
Name: 消息名称 Notification_GetUserProfileSuccess
object: 消息发送者 userProfile
userInfo: 消息传递的数据信息

 

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

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

注销观察者有2个方法:

a. 最优的方法,在 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.

 

b. 单个移除:

[[NSNotificationCenter defaultCenter] removeObserver:self name:@"Notification_GetUserProfileSuccess" object:nil];

IOS学习之 NSNotificationCenter消息通信机制介绍

作用:NSNotificationCenter是专门供程序中不同类间的消息通信而设置的. 注册通知:即要在什么地方接受消息               [[NSNotificationCenter d...
  • u010963948
  • u010963948
  • 2015年11月02日 15:10
  • 416

Unity3D开发和总结:用C#封装类似苹果NSNotificationCenter消息通信机制(KVO)

前言: 对于苹果NSNotificationCenter机制不大了解的童鞋,建议去看看苹果的API文档。此处介绍如何用C#实现该种机制。 说明: 很简单,总共就2个类,直接上代码。 代码: Not...
  • kepoon
  • kepoon
  • 2015年05月05日 16:16
  • 1192

NSNotification多次执行的问题

本文主要讲述在iOS开发过程中, 有关于NSNnotification的使用相关的问题, 问题主要源于我在项目开发中, 监听键盘显示和关闭的相关通知, 发现通知方法会被多次执行, 因为有很多地方会注册...
  • wlaizff
  • wlaizff
  • 2016年07月22日 14:38
  • 2503

IOS NSNotificationCenter消息通信机制介绍

作用:NSNotificationCenter是专门供程序中不同类间的消息通信而设置的. 注册通知:即要在什么地方接受消息               [[NSNotificationCenter...
  • kiki1985
  • kiki1985
  • 2013年03月26日 10:29
  • 21144

IOS NSNotificationCenter消息通信机制介绍

作用:NSNotificationCenter是专门供程序中不同类间的消息通信而设置的. 注册通知:即要在什么地方接受消息               [[NSNotificationCenter...
  • Eduora_meimei
  • Eduora_meimei
  • 2014年05月20日 16:21
  • 669

ios的消息机制 以及 动态性质

1。动态消息派发系统 大部分的语言 使用的是 静态绑定的函数调用方式。这种方式 在编译阶段就确定了运行时候需要调用的函数。而objective-c 使用的是消息传递机制。在运行的时候才会知道调用的函...
  • x6587305x
  • x6587305x
  • 2015年05月27日 15:59
  • 466

iOS Runtime详解(消息机制,类元对象,缓存机制,消息转发)

原创Blog,转载请注明出处 http://blog.csdn.net/hello_hwc?viewmode=list 我的stackoverflow前言:之前一篇文章里,我详细的讲解了一些基...
  • Hello_Hwc
  • Hello_Hwc
  • 2015年11月09日 15:02
  • 4403

iOS学习笔记6-关于NSNotificationCenter及同步异步

iOS 提供了一种 “同步的” 消息通知机制NSNotificationCenter,观察者只要向消息中心注册, 即可接受其他对象发送来的消息,消息发送者和消息接受者两者可以互相一无所知,完全解耦。...
  • xiaoluodecai
  • xiaoluodecai
  • 2015年08月19日 20:21
  • 2192

iOS——NSNotificationCenter消息通信机制实践使用

NSNotificationCenter消息通信机制介绍(KVO) 作用:NSNotificationCenter是专门供程序中不同类间的消息通信而设置的. 注册通知:即要在什么地方接受消息   ...
  • gaodeying123
  • gaodeying123
  • 2015年03月09日 19:11
  • 207

关于OC中消息转发机制的理解以及在项目中的实际应用

关于OC中的消息转发机制想必大家都很了解,现在来温习一下: 一、什么是消息转发? @selector 是什么? 1一种类型 SEL 2代表你要发送的消息(方法), 跟字符串有点像, 也可以互转....
  • Chuanfeng_liu
  • Chuanfeng_liu
  • 2014年09月11日 09:37
  • 1043
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:IOS 消息机制(NSNotificationCenter)
举报原因:
原因补充:

(最多只允许输入30个字)