在iOS中可以直接调用某个对象的消息,有几种方法:
1. 直接使用该对象进行调用;
2. 可以使用performSelector: withObject;
3. 可以使用NSInvoke来调用。
方法2以及方法3两种方法的区别在于:方法3可以适用于在方法中存在多个参数,以及需要使用该方法的返回值的时候。
使用NSInvoke的方法需要注意:
(1) 传入参数需要从下标2开始,第一个参数用于传入调用的对象
(2) 需要查看返回值类型的时候需要使用NSInvocation中的属性中的methodSignature来获取。
例如:
NSMethodSignature *msg = [[mTestInvoke class] instanceMethodSignatureForSelector:@selector(testInvoke:withArg2:)];
if (msg == nil)
{
NSLog(@"该类没有实现该方法");
return ;
}
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:msg];
// 设置调用制定方法的对象
[invocation setTarget:mTestInvoke];
// 设置第一个参数
int arg1 = 12;
[invocation setArgument:&arg1
atIndex:2];
// 设置第二个参数
int arg2 = 23;
[invocation setArgument:&arg2
atIndex:3];
// 设置需要调用的方法
[invocation setSelector:@selector(testInvoke:withArg2:)];
// 调用方法
[invocation invoke];
// 获取返回值
int returnValue = 0;
[invocation getReturnValue:&returnValue];
// 在这边需要获取返回值的类型
NSLog(@"返回值是 %d, 返回值类型是 %s", returnValue, invocation.methodSignature.methodReturnType);