8

通知、ポスター、オブザーバーの内容を理解しています。

しかし、私たちのアプリまたは OS がどのようにフラグ/通知を理解し、オブザーバー クラスに送信するのか理解できません。

この背後にあるメカニズムは何ですか?

あなたの答えと助けは大歓迎です。

ありがとう

ID。

4

4 に答える 4

7

通知センターを、通知名のキーとオブザーバーのリストの値 (および指定されたアクション メソッド) を持つ辞書として想像してください。通知が投稿されると、その通知名のオブザーバーのリストが取得され、繰り返されます。各オブザーバーには、通知情報を使用して呼び出されるアクション メソッドがあります。

また、反復中に、通知オブジェクトがオブザーバーにとって重要かどうかを判断するためのチェックがあります (オブザーバーが追加されたときに指定されたパラメーターに基づいて)。

通知プロセスは、通知が投稿されたスレッドで実行されます。

オブザーバーがいつどのように追加されたかに関連する暗黙の順序に依存しようと考えないでください。

于 2013-06-30T08:02:39.710 に答える
4

基本的に、NotificationCenter は、オブザーバーとして登録されているすべてのオブジェクトへの参照を保持します。その参照を使用して、オブジェクトが必要とする通知の種類も追跡します。オブジェクトが通知を送信すると、センターは、オブザーバーにそのセレクターを使用してメッセージを送信することにより、登録されている各オブザーバーに通知を配信します。

デフォルトのセンターは通常、グローバル シングルトンです。ただし、通知をアプリに対して非公開にしたい場合などは、独自に作成することもできます。

于 2013-06-30T09:41:57.637 に答える
1

通知を送信するために、オブジェクトは以下を送信します。

[[NSNotificationCenter defaultCenter] postNotificationName:@"notif_key" object:nil userInfo:userDict];

これで、@"notif_key" という名前の通知をリッスンするすべての生きているオブジェクトは、何らかのアクションを実行できます。

聞くオブジェクトをどのように作成しますか?

実行する必要があります:

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

最初のオブジェクトが通知を送信すると、オブザーバー オブジェクトは「doSomething:」メソッドを実行します。

ノート:

  • userDict は、これらのオブザーバーに情報を送信できる辞書です。
  • dealloc メソッドでオブザーバーをキャンセルすることを忘れないでください。
于 2013-06-30T08:01:31.757 に答える
0

頭の中で消化するのに時間がかかったあなたの理解にそれを追加してください. 内部でどのように機能するかはわかりませんが、機能するためにどのように実装されているかはわかります

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

出典:アップルのドキュメント

そのため、通知は任意のスレッドに登録できますが、通知に関連付けられたメソッドは通知が投稿されたスレッドで実行されるため、UI に変更を加えたい場合はメイン スレッドにディスパッチします。

于 2016-07-26T11:36:04.137 に答える