NSNotificationCenter消息通信机制介绍(KVO)
作用:NSNotificationCenter是专门供程序中不同类间的消息通信而设置的。每一个应用都有属于自己的一个通知中心,类似于一个公告栏,每一个类都可以在上面发布消息。观察者则通过发布的通知的名字观察是否有它在观察的信息。每当有新消息发布的时候,通知中心则把消息发布给已经注册了的观察者。观察者收到消息之后就能作出相应的反应。
作用:NSNotificationCenter是专门供程序中不同类间的消息通信而设置的。每一个应用都有属于自己的一个通知中心,类似于一个公告栏,每一个类都可以在上面发布消息。观察者则通过发布的通知的名字观察是否有它在观察的信息。每当有新消息发布的时候,通知中心则把消息发布给已经注册了的观察者。观察者收到消息之后就能作出相应的反应。
一、注册通知:即要在什么地方接受消息
<pre name="code" class="objc">[[NSNotificationCenter defaultCenter]
addObserver:self
<span style="white-space:pre"> </span>selector:@selector(mytest:)
<span style="white-space:pre"> </span>name:@" mytest"
<span style="white-space:pre"> </span>object:nil];
参数介绍:
addObserver: 观察者,即在什么地方接收通知;
selector: 收到通知后调用何种方法;
name: 通知的名字,也是通知的唯一标示,编译器就通过这个找到通知的。
二、发送通知:调用观察者处的方法
[[NSNotificationCenter defaultCenter]
<span style="white-space:pre"> </span>postNotificationName:@"mytest"
<span style="white-space:pre"> </span>object:searchFriendArray
<span style="white-space:pre"> </span>userInfo: dic];
参数介绍:
postNotificationName:通知的名字,也是通知的唯一标示,编译器就通过这个找到通知的。
object:传递的参数
userInfo: 可选择参数。接受一个字典型变量。主要用于传递多个变量,即可以把多个变量包装成一个字典型变量,再通过通知中心传递给观察者。
使用NSNotificationCenter的注意点:
Q1:如果使用NSNotificationCenter在不同的类之间通讯却无法得到正确的结果。
解决方案:
注册观察者后要成功监听到通知中心的信息的时候一定要在消息发布之前注册,而不能在发布后才注册,如果出现这种问题要检查下通知信息流通的逻辑顺序有没有问题。