0

假设我从一个快速触发的课程中发布了这个帖子:

[[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 的时间比它收到通知中心的呼叫时间长怎么办?

4

2 回答 2

4

所有发布的通知都会发送给观察者并立即在同一线程上处理。因此,如果gotData:需要时间并且不将其处理推送到不同的线程上,它只会阻塞将发布下一个通知的任何内容。因此,下一个通知将及时发布(比您预期的要晚)。

于 2013-10-07T23:25:24.683 回答
3

它不能花更长的时间——调用是完全同步的。通知中心充当一对多消息交换所,将可能想要收听的参与者与可能想要宣布事件的参与者分离。

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

于 2013-10-07T23:25:32.143 回答