web-dev-qa-db-ja.com

客観的なCメソッドを文字列で動的に呼び出す

文字列を使用してその場でメソッドの名前を作成するメソッドを呼び出す方法があるかどうか疑問に思っています。

例えばloaddataというメソッドがあります

-(void)loadData;

これを呼び出すには、通常、次のように呼び出します

[self loadData];

しかし、私はそれを文字列で動的に呼び出すことができるようにしたい.

NSString *methodName = [[NSString alloc] initWithString:@"loadData"];
[self methodName];

これは馬鹿げた例ですが、あなたが私の論点を得ることを願っています。 IPadアプリケーション用に設定しているデータバインディングクラスに使用しています。説明するのは難しいが、それを起動させるには、文字列でメソッドを呼び出す方法を考え出す必要があります。

何か案は?

ありがとう

72

あなたは次のようなものを試すことができます

SEL s = NSSelectorFromString(selectorName);
[anObject performSelector:s];
103
shreyasva

Objc_msgSend関数を使用できます。受信側と送信側のセレクタという2つのパラメータが必要です。

objc_msgSend(self, someSelector);

NSSelectorFromStringを使用して、文字列を適切なセレクターに変換する必要があります。

NSString *message = [self getSomeSelectorName];
objc_msgSend(self, message);

また、このメソッドは可変数の引数を受け取るため、任意の数の引数を持つメッセージを送信できます。

NSString *message = [self getSomeSelectorNameWithManyArguments];
objc_msgSend(self, message, arg1, arg2, arg3, arg4);
12
Adam Milligan

NSSelectorFromString が必要です。

7
Carl Norum