メッセージ転送の使い方を簡単に説明できる人はいますか?
リンク
- Apple のドキュメント: Apple のドキュメントはリファレンスとしては優れている傾向がありますが、長すぎて導入としては最適ではありません。
メッセージ転送の使い方を簡単に説明できる人はいますか?
リンク
単純な委譲パターン: オブジェクトがメッセージ aMethod に応答し、[otherObject RespondsToSelector:@selector(aMethod)] を送信して他のオブジェクトがメッセージ aMethod に応答するかどうかをチェックします。これは bool を返します。otherObject が送信する場合は、メッセージを送信しても問題ありません。
より技術的な優れた NSInvocation メソッド: オブジェクトに応答できないメッセージが送信された場合 (crazyMethodName)、オブジェクトに対して forwardInvocation が呼び出されます。NSObject の forwardInvocation のデフォルトの実装は、doesNotRecognizeSelector を呼び出すだけです。これは、オブジェクトがセレクターを認識しないためです。別のオブジェクトが呼び出しのセレクターに応答するかどうかを確認し、応答している場合は他のオブジェクトでその呼び出しを呼び出すことにより、 forwardInvocation のデフォルトの実装をオーバーライドできます。
メッセージ転送の一般的な使用法は、クラスを他のクラスのプロキシとして機能させることです。このNSProxy
サブクラスのインスタンスにメッセージを送信し、適切と見なされるクラスまたはオブジェクトにメッセージをディスパッチします。
メッセージ転送は、実際には、クラスが受け入れるように設計されていないメッセージを受信できるようにするだけです。これを使用して、その場でメソッドを動的に作成することもできます。このアプリケーションは、エンティティごとにNSManagedObject
カスタムサブクラスを作成せずに、メソッド呼び出しでCoreDataプロパティにアクセスできるようにするカテゴリになります。この種のことはRubyでNSManagedObject
私に思い出させます。method_missing