NSNotificationCenter是同步的?还是异步的?

- (void)viewDidLoad {
    [super viewDidLoad];
    
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notificationAction:)
                                                 name:kNotificationName object:nil];
    
}
 
- (void) notificationAction: (NSNotification*)notification
{
    NSLog(@"sleep 之前");
    
    sleep(10);
    
    NSLog(@"sleep 之后");
    
}
 
- (void)buttonActon:(id)sender{
    [[NSNotificationCenter defaultCenter] postNotificationName:kNotificationName object:nil];
    
    NSLog(@"buttonActon:");
}

// 打印顺序如下:
sleep 之前
sleep 之后
buttonActon:

结论:
(1)NSNotificationCenter 默认是同步的,在通知发出之后,观察者要处理完通知事件之后,通知的发送者才能继续往下执行。
(2)NSNotificationCenter 会一直等待所有的 观察者 都收到并且处理了通知才会返回到 通知发送者。
(3)如果想NSNotificationCenter不阻塞当前线程,可以根据实际情况,考虑将通知的发送放在子线程,或者将通知的处理方法放在子线程调用。

你可能感兴趣的:(NSNotificationCenter是同步的?还是异步的?)