NSNotificationCenter 深入使用

前言

通知发送,一般我们会使用

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

然后在任意地方使用

 [[NSNotificationCenter defaultCenter] postNotificationName:@"mytest" object:nil];

被能是观察者self调用其mytest:方法。

而我们会发现,方法

- addObserver:selector:name:object:

中object:一般传nil,但我们往往不知道他的用处,看了网上一些介绍说是参数的说法并不对,其实实际上是发送者。

介绍

参考官方API

设置通知观察者

- (void)addObserver:(id)notificationObserver selector:(SEL)notificationSelector name:(NSString *)notificationName object:(id)notificationSender

其中,
notificationObserver为观察者
notificationSelector为收到通知后观察者调用的方法
notificationName为通知的key
notificationSender为通知的发送者,也就是该通知只接受来自notificationSender的通知;如果改参数为nil,则接受所以的通知(包括发送时指定发送者的通知)

发送通知

- (void)postNotificationName:(NSString *)notificationName object:(id)notificationSender

其中,
notificationName为通知的key
notificationSender为发送者,设置后,该通知只向设置了监视的该发送者的通知或者设置发送者为nil的通知发送消息;若这里发送者设置为nil,则只有设置发送者为nil的通知才会收到通知

如果发送通知的时候需要附带其他信息,可使用

- (void)postNotificationName:(NSString *)notificationName object:(id)notificationSender userInfo:(NSDictionary *)userInfo

附带一个字典参数userInfo过去。

接收通知处理

设用监听通知

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

则通知的调用mytest:方法

- (void)mytest:(NSNotification*) notification{
    id obj = [notification object];//获取到发送者
    NSDictionary *userinfo=[notification userInfo];//获取发送通知时传人的字典userInfo

    NSLog(@"%@",obj);
    NSLog(@"%@",userinfo);
}

移除通知观察者

移除观察者的所有通知(一个观察者可以有多个通知监听)

- (void)removeObserver:(id)notificationObserver

若要移除观察者的指定通知,使用

- (void)removeObserver:(id)notificationObserver name:(NSString *)notificationName object:(id)notificationSender

你可能感兴趣的:(iOS-通知)