Objective C使用字符串动态调用方法

时间:2010-12-15 05:05:58

标签: iphone objective-c dynamic methods messaging

我只是想知道是否有办法调用一个方法,我用一个字符串动态建立方法的名称。

e.g。我有一个名为loaddata

的方法
-(void)loadData;

打电话给我,我通常称之为

[self loadData];

但我希望能够用字符串动态调用它,例如

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

这是一个愚蠢的例子,但我希望你明白我的观点。我正在使用它来为我为我的IPad应用程序设置的数据绑定类。很难解释,但要解决它,我需要弄清楚如何用字符串调用方法。

有什么想法吗?

由于

2 个答案:

答案 0 :(得分:103)

您可以尝试类似

的内容
SEL s = NSSelectorFromString(selectorName);
[anObject performSelector:s];

答案 1 :(得分:11)

您可以使用objc_msgSend函数。它需要两个参数,接收器和选择器发送给它:

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);