4

メッセージ転送の使い方を簡単に説明できる人はいますか?

リンク

  • Apple のドキュメント: Apple のドキュメントはリファレンスとしては優れている傾向がありますが、長すぎて導入としては最適ではありません。
4

2 に答える 2

5

単純な委譲パターン: オブジェクトがメッセージ aMethod に応答し、[otherObject RespondsToSelector:@selector(aMethod)] を送信して他のオブジェクトがメッセージ aMethod に応答するかどうかをチェックします。これは bool を返します。otherObject が送信する場合は、メッセージを送信しても問題ありません。

より技術的な優れた NSInvocation メソッド: オブジェクトに応答できないメッセージが送信された場合 (crazyMethodName)、オブジェクトに対して forwardInvocation が呼び出されます。NSObject の forwardInvocation のデフォルトの実装は、doesNotRecognizeSelector を呼び出すだけです。これは、オブジェクトがセレクターを認識しないためです。別のオブジェクトが呼び出しのセレクターに応答するかどうかを確認し、応答している場合は他のオブジェクトでその呼び出しを呼び出すことにより、 forwardInvocation のデフォルトの実装をオーバーライドできます。

于 2009-12-16T05:57:51.673 に答える
4

メッセージ転送の一般的な使用法は、クラスを他のクラスのプロキシとして機能させることです。このNSProxyサブクラスのインスタンスにメッセージを送信し、適切と見なされるクラスまたはオブジェクトにメッセージをディスパッチします。

メッセージ転送は、実際には、クラスが受け入れるように設計されていないメッセージを受信できるようにするだけです。これを使用して、その場でメソッドを動的に作成することもできます。このアプリケーションは、エンティティごとにNSManagedObjectカスタムサブクラスを作成せずに、メソッド呼び出しでCoreDataプロパティにアクセスできるようにするカテゴリになります。この種のことはRubyでNSManagedObject私に思い出させます。method_missing

于 2009-12-16T08:09:42.773 に答える