发布两个NSNotification时的执行顺序

时间:2011-03-02 07:17:38

标签: objective-c ios xcode nsnotifications nsnotificationcenter

关于NSNotification的快速问题...如果我在方法中发布了两个NSNotifications,并且它们被不同的对象观察到,那么选择器方法的执行顺序是什么?

例如,如果我有三个控制器 - 海报,接收器A和接收器B.在Poster控制器的功能中,我执行以下操作:

[[NSNotificationCenter defaultCenter] postNotificationName:@"ReceiverADoSomething" object:self];
[[NSNotificationCenter defaultCenter] postNotificationName:@"ReceiverBDoSomething" object:self];

在接收者A的viewDidLoad方法中:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(workToDoByA:) name:@"ReceiverADoSomething" object:nil];

在接收者B的viewDidLoad方法中:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(workToDoByB:) name:@"ReceiverADoSomething" object:nil];

workToDoByA完成workToDoByB吗? 或者他们将一起执行?

另一种情况......如果我有海报A发布通知,但有两个观察员发送相同的通知。那么执行顺序是什么?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:4)

摘自Apple文档:

  

通知中心同步向观察者发送通知。换句话说,postNotification:方法在所有观察者都收到并处理通知之前不会返回。要异步发送通知,请使用NSNotificationQueue。在多线程应用程序中,通知始终在发布通知的线程中传递,这可能与观察者注册的线程不同。

相同的政策适用于postNotificationName。