2013-04-30 12 views
30

クラスが特定のタイプのNSNotificationCenterイベントを登録し、別のクラスがそのタイプのイベントを投稿した場合、受信クラスのコードは投稿クラスが続行する前に(同期的に)実行されますか(非同期的に)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 caller」の前後に「Hello from receiver」が印刷されますか?

+0

http://stackoverflow.com/questions/1900352/what-is-nsnotificationをご覧ください。 –

+0

以下の回答の元の記事を読んでください.http://stackoverflow.com/questions/7880742/ios-are-メインスレッドで実行される、デリゲートとオブザーバーと呼ばれるメソッド – BhushanVU

答えて

65

NSNotificationCenter NSNotificationCenter Class Referenceのドキュメントに記載されているように、通知は同期的に送信されます。

通知センターは、オブザーバーに通知を同期的に配信します。 つまり、すべてのオブザーバが通知を受信して​​処理するまで、postNotification:メソッドは返されません。通知を非同期に送信するには、NSNotificationQueueを使用します。

マルチスレッドアプリケーションでは、通知は通知が送信されたスレッドで常に配信されます。通知は、オブザーバが登録した同じスレッドとは異なる場合があります。

お手伝いします。

+3

短く適切な答え!! –

+0

私は "同期"用語を理解していないか、あなたの答えはまったく間違っています。私は次の順序で電話したかった。1)通知。 2)通知ハンドラ。 3)コードを通知の同じブロックに挿入します。しかし、それは1、3、2と呼ばれています - 間違った注文 – Gargo

+0

@ガルゴあなたが答えが間違っているとは分かりません。これは正解で受け入れられた答えです。 –

関連する問題