这里我是参考网上资料的一个处理,直接贴代码
void invokeSelector(id object, SEL selector, NSArray *arguments)
{
NSMethodSignature *signature = [object methodSignatureForSelector:selector];
if (signature.numberOfArguments == 0) {
return; //@selector未找到
}
if (signature.numberOfArguments > [arguments count]+2) {
return; //传入arguments参数不足。signature至少有两个参数,self和_cmd
}
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature];
[invocation setTarget:object];
[invocation setSelector:selector];
for(int i=0; i<[arguments count]; i++)
{
id arg = [arguments objectAtIndex:i];
[invocation setArgument:&arg atIndex:i+2]; // The first two arguments are the hidden arguments self and _cmd
}
[invocation invoke]; // Invoke the selector
}
注意这个方法有个缺陷,只能传入对象参数,不能传入数值、指针等类型。如果有其他需求,你可以自己改造方法
调用示例如下
@implementation AppDelegate
- (voi