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

我只是想知道是否有一种方法可以调用一个方法,在这个方法中我使用一个字符串动态地构建方法的名称。

例如,我有一个名为 loaddata 的方法

-(void)loadData;

我通常会这样称呼它

[self loadData];

但是我希望能够用一个字符串动态地调用它。

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

这是一个愚蠢的例子,但我希望你明白我的意思。我使用它的数据绑定类,我正在为我的 IPad 应用程序设置。很难解释,但是为了让它生效,我需要解决如何用字符串调用方法的问题。

有什么想法吗?

谢谢

32186 次浏览

你可以试试

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

你可以使用 objecc _ 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);