2009-06-01 25 views

答えて

6

皮肉なことに、Objective-Cのすべてのメソッド呼び出しはSendMessageに相当します。 Objective-Cは、メッセージの受け渡しシステムを心がけています。

だから、あなただけ言う:

[window myMessage] 

とmyMessageルーチンは、WindowオブジェクトにmyMessageを渡すと、それはそのメソッドを処理することによって実行されます...

それがまた近い事が可能です本当にしたいのは、コンポーネント間のメッセージに通知を使用することです。

コンパイル時にWindowオブジェクトが周囲にない場合、コンパイラはWindowが送信しているメッセージを処理できるかどうかわからないことを文句を言うかもしれません。そのような場合は次を使用できます:

[window performSelector:@selector(myMessage)] 

オブジェクトをパラメータとして渡すことができる代替バージョンがあります。より高いレベルで

+0

なぜあなたはこの皮肉なことを言ったのか分かりませんが、確かに正しい答えです:) SendMessageの全体のコンセプトは、ビザンチンで最もダイナミックなディスパッチを実現する単なる方法です。もちろん、他のすべての形式のメッセージ送信に比べて非常に遅いです。 – StilesCrisis

+0

遅れていたので、数億ドルの研究開発費があなたの言語を手に入れました。今すぐ他の言語だけが適切なメモリ管理のためにARCほど速いものを持っていれば... –

1

参照機能を使用するどのようなメッセージあなたはSendMessage関数で送信することだろう( )。 Cocoaのほとんどのイベントは、たとえば-[NSApplication sendEvent:]、または下位バージョンが必要な場合はSendEventToEventTarget()になります。サイズ変更、移動などのその他のメッセージについては、NSWindowの適切なメソッド(-setFrame:animated:など)またはNSApplicationを調べる必要があります。

一般的に言えば、SendMessage()のようにファンネルルーチンと関数定数を使用する代わりに、関連するオブジェクトを取得してそのメソッドを呼び出すだけです。

関連する問題