0

私のメインクラスが多くの通知を聞いても大丈夫ですか? 例えば ​​:

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

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

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

私の主なクラスは、彼女の子メッセージの多くを聞くことです。デリゲートは仕事が多すぎるので、それを回避しようとしました。

4

3 に答える 3

0

簡単な答えはイエスです。通知は必要な数だけ登録できます。

少なくとも、dealloc で通知センターから self を削除してください。

(一時的に通知を確認することもできますが、まだそこにいないようです)

于 2013-10-28T09:32:19.567 に答える
0

A. コピー&ペーストエラーですか?同じオブザーバーの 3 つのメソッドを同じ通知に登録します。他のメソッドを「呼び出す」メソッドを 1 つ登録するだけです。だから、あなたがしたいことをする理由はありません。

B. 通知とデリゲートの違いはスレッドではありません。どちらもデフォルトで外部スレッドで実行されます。(必要に応じて、これを非常に簡単に変更できますが、両方の場合も同様です。)

C. 本当の違いは、デリゲート メッセージが直接送信されるのに対し、通知は間接的であることです。通知の送信者は、不明な数の不明な受信者に直面する可能性があります。委任オブジェクトは、特定の委任と共に機能します。これを、(非インタラクティブな) ブロードキャスト TV 応答である通知と比較できます。インタラクティブな IP-TV であることを委任します。(わかりました、これは単純化されています。)その結果、デリゲートは委任オブジェクトの動作を変更できますが、通知オブザーバー(どれですか?)は通知送信者の動作を変更できません。

設計にオブジェクトの特定のパートナーシップがある場合は、委任を使用する必要があります。仕事が多かれ少なかれ、この立場を変える理由にはなりません。(そして、これが真実であるとは思いません。)

于 2013-10-28T08:17:21.033 に答える