6

プロジェクト全体で、あるクラスから別のクラスにデータを流すために使用するのに適しているのはどれですか?

NSInvocation

NSNotificationCentre

delegateメソッド

または私が知らない他の方法で??

4

4 に答える 4

7

それらはすべて異なる目的を果たすため、すべて存在します。簡単に:

NSInvocation

オブジェクトとして表される、オプションのパラメータを使用して1つのオブジェクトに送信される抽象メッセージ。特にブロックの導入以来、あまり頻繁には使用されません。

NSOperationサブクラスの作成を回避するための便利な方法としても使用できます(を参照NSIvocationOperation)。

NSNotificationCenter

任意の数の不明な「リスナー」にメッセージをブロードキャストします。1対多。ブロードキャスターはリスナーについて知る必要はありません。補足情報用のユーザー情報辞書が含まれています。ロットの中で最も重い/最も遅い-頻繁には必要ありませんが、便宜上頻繁に見られます。

多くの場合、代理人は十分な代理人です。

メソッドのデリゲート

通常、特定のプロトコルを採用する抽象オブジェクト。1対1の関係。サブクラス化ではなくアクションを処理する一般的な手段。


または私が知らない他の方法で??

ブロック (^)は、コールバック/ハンドラーとしても使用でき、多くの場合、NSInvocationsのよりタイプセーフな代替として使用できます。

于 2012-09-04T06:08:02.287 に答える
1

1つのオブジェクトとのみ通信する場合は、デリゲートを使用します。たとえば、tableViewにはデリゲートがあります。1つのオブジェクトのみがそれを処理する必要があります。

何かが起こったことを全員に知らせたい場合は、通知を使用してください。たとえば、メモリ不足の状況では、メモリ警告が発生したことをアプリに通知する通知が送信されます。アプリ内の多くのオブジェクトがメモリ使用量を減らしたい場合があるため、これは通知です。

それが役に立てば幸い。

于 2012-09-04T06:07:32.947 に答える
1

NSInvocationは、他のすべての人が書いたものすべてに追加するために、このカテゴリに属していません。引数と可能なターゲットを含むメソッドの呼び出しを格納するだけです。NSNotificationCeterがその作業を行うために使用します。

于 2012-09-04T06:16:00.790 に答える
0

委任を使用します。プラットフォーム間で移植可能であり、よりタイトです(すべてが中央のディスパッチングシステムを経由するわけではありません)。

于 2012-09-04T06:04:27.907 に答える