2013-10-07 94 views
0

比方说,我有一类这种发帖称快速触发:寿命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比它确实接收来自通知中心的呼叫吗?

回答

3

它不能花更长的时间 - 呼叫是完全同步的。通知中心充当一对多信息交流中心,将可能想要从可能想要公布事件的演员倾听的演员分开。

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

+0

如果我有两个观察者,那么可以比另一个更快处理? – user523234

+0

@ user523234然后就好像发布通知的对象依次被调用一样。所以这将是'postNotificationName:'调用返回之前两个处理位的总时间。 – Tommy

4

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

+0

你和汤米的答案都清除了我对NSNotification的误解。谢谢。 – user523234