- (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不阻塞当前线程,可以根据实际情况,考虑将通知的发送放在子线程,或者将通知的处理方法放在子线程调用。
网友评论