クラスが特定のタイプの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");
}
上記のコード例では、「Hellofromreceiver」は「Hellofromcaller」の前または後に印刷されますか?
NSNotificationCenterのドキュメントに記載されているように NSNotificationCenterクラスリファレンス 通知は同期して投稿されます。
通知センターは、オブザーバーに同期的に通知を配信します。つまり、postNotification:メソッドは、すべてのオブザーバーが通知を受信して処理するまで戻りません。通知を非同期で送信するには、NSNotificationQueueを使用します。
マルチスレッドアプリケーションでは、通知は常に通知が投稿されたスレッドで配信されます。これは、オブザーバーが自分自身を登録したスレッドとは異なる場合があります。
それがあなたを助けることを願っています。