通知を投稿してから通知を受け取るまでにどのくらいの時間がかかりますか。
その理由は、オブザーバーパターンが自分に適しているかどうかを調べたいからです。通知が送信されて処理される前に、別のViewControllerが値を変更できるようにしたくありません。別のプロセス(スレッド?)の方が高速で、値が上書きされるべきではないときに上書きされるのではないかと心配しています。
通知を投稿してから通知を受け取るまでにどのくらいの時間がかかりますか。
その理由は、オブザーバーパターンが自分に適しているかどうかを調べたいからです。通知が送信されて処理される前に、別のViewControllerが値を変更できるようにしたくありません。別のプロセス(スレッド?)の方が高速で、値が上書きされるべきではないときに上書きされるのではないかと心配しています。
通知センターはメッセージを同期的に配信します。つまりpostNotification:
、通知を受信するために登録されたすべてのオブジェクトが通知を処理するまで、メソッドは返されません。つまり、通知を投稿してから通知を受け取るまでに時間がかからないと考えることができます。
知っておく必要のある追加事項がいくつかあります。
通知は、それらが投稿されたのと同じスレッドで受信されます。を使用して通知をメインスレッドに移動する場合、がに設定されているとperformSelectorOnMainThread:withObject:waitUntilDone:
、同期動作を中断できます。がに設定されている場合、通知を渡すスレッドは、メインスレッドが指定されたアクションの実行を終了するまでブロックされます。waitUntilDone
NO
waitUntilDone
YES
オブザーバーが通知を受け取る順序は保証されません。1つの通知に複数のオブザーバーがいる場合は、特定の順序で通知を受信するオブザーバーに依存しないでください。
上記を考慮し、どのスレッドがアプリケーションに通知を投稿しているか、どのスレッドがそれらを処理する必要があるかを知っていると、オブザーバーパターンが機能するかどうかを理解できるはずです。
enqueueNotificationを使用して、通知の処理をよりきめ細かく制御できますが、最終的には、NotificationCenterの実装に関係なく、懸念を表明したのと同じ問題が発生する可能性があると思います。