这个类可以理解为一个消息对象,其中有三个成员变量。
这个成员变量是这个消息对象的唯一标识,用于辨别消息对象。
@property (readonly, copy) nsstring *name;
这个成员变量定义一个对象,可以理解为针对某一个对象的消息。
@property (readonly, retain) id object;
这个成员变量是一个字典,可以用其来进行传值。
@property (readonly, copy) nsdictionary *userinfo;
nsnotification的初始化方法:
- (instancetype)initwithname:(nsstring *)name object:(id)object userinfo:(nsdictionary *)userinfo;
+ (instancetype)notificationwithname:(nsstring *)aname object:(id)anobject;
+ (instancetype)notificationwithname:(nsstring *)aname object:(id)anobject userinfo:(nsdictionary *)auserinfo;
注意:官方文档有明确的说明,不可以使用init进行初始化
这个类是一个通知中心,使用单例设计,每个应用程序都会有一个默认的通知中心。用于调度通知的发送的接受。
添加一个观察者,可以为它指定一个方法,名字和对象。接受到通知时,执行方法。
- (void)addobserver:(id)observer selector:(sel)aselector name:(nsstring *)aname object:(id)anobject;
发送通知消息的方法
- (void)postnotification:(nsnotification *)notification;
- (void)postnotificationname:(nsstring *)aname object:(id)anobject;
- (void)postnotificationname:(nsstring *)aname object:(id)anobject userinfo:(nsdictionary *)auserinfo;
移除观察者的方法
- (void)removeobserver:(id)observer;
- (void)removeobserver:(id)observer name:(nsstring *)aname object:(id)anobject;
几点注意:
1、如果发送的通知指定了object对象,那么观察者接收的通知设置的object对象与其一样,才会接收到通知,但是接收通知如果将这个参数设置为了nil,则会接收一切通知。
2、观察者的sel函数指针可以有一个参数,参数就是发送的死奥西对象本身,可以通过这个参数取到消息对象的userinfo,实现传值。
首先,我们在需要接收通知的地方注册观察者,比如:
<a href="http://my.oschina.net/u/2340880/blog/406163#">?</a>
1
2
3
4
<code> </code><code>//获取通知中心单例对象</code>
<code> </code><code>nsnotificationcenter * center = [nsnotificationcenter defaultcenter];</code>
<code> </code><code>//添加当前类对象为一个观察者,name和object设置为nil,表示接收一切通知</code>
<code> </code><code>[center addobserver:self selector:@selector(notice:) name:@</code><code>"123"</code> <code>object:nil];</code>
之后,在我们需要时发送通知消息
<code> </code><code>//创建一个消息对象</code>
<code> </code><code>nsnotification * notice = [nsnotification notificationwithname:@</code><code>"123"</code> <code>object:nil userinfo:@{@</code><code>"1"</code><code>:@</code><code>"123"</code><code>}];</code>
<code> </code><code>//发送消息</code>
<code> </code><code>[[nsnotificationcenter defaultcenter]postnotification:notice];</code>
我们可以在回调的函数中取到userinfo内容,如下:
<code>-(</code><code>void</code><code>)notice:(id)sender{</code>
<code> </code><code>nslog(@</code><code>"%@"</code><code>,sender);</code>
<code>}</code>
打印结果如下: