2011-09-12 3 views
3

実行時にメッセージを作成し、iOS上のオブジェクト-cのオブジェクトに送信することは可能ですか?
のは私が実行時に動的メッセージをiOSのObjective-cのオブジェクトに送信

NSString * d = @"action1:"; 
[myFoo d]; 
d = @"action2:"; 
[myFoo d]; 

Fooようなものを使用することができるようにしたい Foo クラスのインスタンスがあるとしましょう少なくとも二つのインスタントな方法がありますがあります

-(void) action1:(id)sender; 
-(void) action2:(id)sender; 

答えて

11
​​

NSObjectにいくつかの異なるperformSelectorメソッドがあります。パラメータがなくても、遅れなどでも呼び出すことができます。

+3

さらに複雑なメソッドの場合は、 'objc_msgSend(myFoo、selector、args)'を使います。引数の型とメソッドの戻り値の型によっては、 '&objc_msgSend'を適切な関数ポインタ型にキャストしてから呼び出す必要があります。 –

+0

@Jonathanコメントをいただきありがとうございます。私はもっと複雑なメソッドを呼び出す必要があると思います。@typeoneerrorの答えはうまくいきます。 'objc_msgSend'がidを返したのはなぜですか?それはすでにメッセージを送信していますか? – Ali

+1

'objc_msgSend'は実際にセレクタによって指定されたメソッドの戻り値を返します。デフォルトでは、Objective-Cメソッドは 'id'を返します。したがって、' objc_msgSend'の戻り値の型は一致します。しかし、他の戻り値の型については、 'objc_msgSend()'をキャストしなければなりません。あるいは、あなたは未定義の動作領域に入ります。 (エキスパートは、その文に関連するウィグルルームを知っていますが、言語のエキスパートである前に、厳密には厳密にコーディングすることをお勧めします)。 –

関連する問題