2009-07-28 4 views

答えて

3

IMPは基本的には、メッセージの受信時に(fooの長さのように)何が実行されるかを決定するフックであるIMplementation Pointerです。あなたが降りて汚れていない限り、通常は必要ありません。通常はセレクタを扱う方が簡単です。

6.1 IMPとは何ですか?

It's the C type of a method implementation pointer, a function 

Objective-Cのメソッドを実装する関数へのポインタ 。 IDを返すように を定義し、2つの隠し引数、自己を取り、_CMDさ:

typedef id (*IMP)(id self,SEL _cmd,...); 

6.2 How do I get an IMP given a SEL ? 

    This can be done by sending a methodFor: message : 

IMP myImp = [myObject methodFor:mySel]; 

6.3 How do I send a message given an IMP ? 

    By dereferencing the function pointer. The following are all 
    equivalent : 

[myObject myMessage]; 

    or 

IMP myImp = [myObject methodFor:@selector(myMessage)]; 
myImp(myObject,@selector(myMessage)); 

    or 

[myObject perform:@selector(myMessage)]; 

Objective C FAQのセクション6.1から。

msgSendについては、これが別のオブジェクトでリモートメッセージを呼び出す方法です。 objc_msgSend(foo、@ selector(bar))は[foo bar]とおおよそ同じです。しかし、これらはすべて低レベル実装の詳細です。 Objective Cコードの拡張呼び出しを使用する必要はほとんどありません。メソッドを保持するために@selectorを実行し、任意のオブジェクトに対してperformSelector:を呼び出すことができるためです。

関連する問題