NSNotification对象的生命周期

时间:2013-10-07 23:21:56

标签: ios nsnotificationcenter nsnotification

让我们说我从一个快速激发的课程中发帖:

[[NSNotificationCenter defaultCenter] postNotificationName:kGotData object:nil userInfo:someDictionaryObject];

来自另一个班级的观察员:

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

-(void)gotData:(NSNotification *)notification
{
    NSDictionary *myUserInfo = notification.userInfo;

    // more code to process userInfo, etc.
}

如果gotData需要更长的时间处理myUserInfo而不是接收来自通知中心的呼叫,该怎么办?

2 个答案:

答案 0 :(得分:4)

所有发布的通知都会发送给观察者,并立即在同一个线程上处理。因此,如果gotData:花费时间并且不将其处理推送到另一个线程,那么它将阻止发布下一个通知的任何内容。因此,下一个通知将在稍后发布(比您预期的更多)。

答案 1 :(得分:3)

不能再花费更长时间 - 通话完全是同步的。通知中心充当一对多的消息传递清算中心,可以分离可能想要从可能想要宣布事件的演员那里收听的演员。

假设您只有一个观察者,那么您的代码就等同于直接调用gotData:。因此,在前一个处理完成之前,不会再发生通知。