41

如果一个类注册NSNotificationCenter了某种类型的事件,而另一个类发布了该类型的事件,那么接收器中的代码将在发布类继续之前(同步)还是之后(异步)执行?

- (void)poster {
    [[NSNotificationCenter defaultCenter]
        postNotificationWithName:@"myevent"
        object:nil];
    NSLog(@"Hello from poster");
}

- (void)receiver {
    [[NSNotificationCenter defaultCenter]
        addObserver:self
        selector:@selector:(mySelector)
        name:@"myevent"
        object:nil];
}

- (void) mySelector:(NSNotification *) notification {
    NSLog(@"Hello from receiver");
}

在上面的代码示例中,“Hello from receiver”会打印在“Hello from caller”之前还是之后?

4

1 回答 1

94

如 NSNotificationCenter 文档中所述,NSNotificationCenter 类参考通知是同步发布的。

通知中心同步向观察者发送通知。换句话说, postNotification: 方法在所有观察者都收到并处理通知之前不会返回。要异步发送通知,请使用NSNotificationQueue

在多线程应用程序中,通知总是在发布通知的线程中传递,这可能与观察者注册自己的线程不同。

希望它可以帮助你。

于 2013-04-30T11:30:33.350 回答