现在的位置: 首页 > 综合 > 正文

NSInvocation的使用

2017年11月14日 ⁄ 综合 ⁄ 共 780字 ⁄ 字号 评论关闭

被调用的方法

//需要调用的方法
- (NSNumber*)getCountWithNum1:(int)num1 num2:(NSNumber*)num2
{
    int num2_int = [num2 intValue];
    return [NSNumber numberWithInt:num1+num2_int];
}

使用方式

//参数及返回值
int num1 = 30;
NSNumber *num2 = [NSNumber numberWithInt:12];
NSNumber *result = nil;

SEL selector = @selector(getCountWithNum1:num2:);
//对类中的方法进行签名
NSMethodSignature *ms = [[self class] instanceMethodSignatureForSelector:selector];
//根据方法签名创建一个NSInvocation
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:ms];
invocation.target = self;
invocation.selector = selector;
//如果此消息有参数需要传入,那么就需要按照如下方法进行参数设置,需要注意的是,atIndex的下标必须从2开始。原因为:0 1 两个参数已经被target 和selector占用
[invocation setArgument:&num1 atIndex:2];
[invocation setArgument:&num2 atIndex:3];
[invocation retainArguments];
[invocation invoke];
[invocation getReturnValue:&result];

NSLog(@"%@", result);

抱歉!评论已关闭.