让我们说我从一个快速激发的课程中发帖:
[[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而不是接收来自通知中心的呼叫,该怎么办?
答案 0 :(得分:4)
所有发布的通知都会发送给观察者,并立即在同一个线程上处理。因此,如果gotData:
花费时间并且不将其处理推送到另一个线程,那么它将阻止发布下一个通知的任何内容。因此,下一个通知将在稍后发布(比您预期的更多)。
答案 1 :(得分:3)
不能再花费更长时间 - 通话完全是同步的。通知中心充当一对多的消息传递清算中心,可以分离可能想要从可能想要宣布事件的演员那里收听的演员。
假设您只有一个观察者,那么您的代码就等同于直接调用gotData:
。因此,在前一个处理完成之前,不会再发生通知。