正确的方式来听取NSNotifications

时间:2015-09-25 08:15:43

标签: ios nsnotificationcenter nsnotifications nsnotification

是否正确,如果我在视图控制器上有2个通知,有2个观察者如此:

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

或者我只是通过将nil传递给名称然后检查handleNotification函数中发送的通知来确定运行了哪个通知:

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

感谢。

1 个答案:

答案 0 :(得分:4)

实际上,如果您将nil作为名称传递,您将收到所有通知,无论其名称是什么(不只是您想要的两个)。最好通过命名来分别订阅每一个。

摘自Apple文档:

  

如果您传递nil,通知中心不会使用通知的名称来决定是否将其传递给观察者。

(起初,这一点对我来说并不清楚,我误以为你不会收到任何通知)。

您可以为两者使用相同的回调/侦听器,并根据收到的通知决定做什么。

您可以在NSNotificationCenter上创建一个类别来处理多个名称的注册,这些名称是为哪些类别制作的!