Objective-C中的动态方法调用

时间:2011-06-10 23:25:54

标签: objective-c

如何在目标c中调用名称为NSString *的选择器?我还需要在目标接受它时才调用选择器。 e.g。

+(void) callMethod: (NSString *) method onObject: (id) object
{
    // do some magic
}

如果callMethod: @"Foo" onObject: obj实施obj Foo,则应调用[obj Foo],然后调用{{1}},如果没有实现,则不会发生任何事情。

2 个答案:

答案 0 :(得分:15)

SEL selector = NSSelectorFromString(method);
if ([object respondsToSelector:selector]) {
    [object performSelector:selector];
}

答案 1 :(得分:6)

首先,使用NSSelectorFromString()方法将字符串转换为方法名称,如下所示:

SEL methodToCall = NSSelectorFromString(stringToConvertToMethod);

然后,检查接收器上的方法并调用方法(如果存在):

if ([receiver respondsToSelector:methodToCall]) {

  //  Method exists, call it.
  [receiver performSelector:methodToCall];

}

请注意,潜在的缺点是你无法传递参数。要传递参数,可以调用NSObject方法performSelector:withObject:。传递两个参数performSelector:withObject:withObject:

相关问题