天天看点

IOS中通知中心(NSNotificationCenter)的使用总结

这个类可以理解为一个消息对象,其中有三个成员变量。

这个成员变量是这个消息对象的唯一标识,用于辨别消息对象。

@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>

打印结果如下:

IOS中通知中心(NSNotificationCenter)的使用总结