NSInvocation

在 iOS中可以直接调用某个对象的消息方式有三种:
一种是[self xxxxxxx];直接对象调用
另一种是 performSelector:withObject;
再一种就是 NSInvocation。比较复杂,容易出错

NSMethodSignature  *signature = [object instanceMethodSignatureForSelector:@selector(run:)];
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature];
invocation.target = self;
//注意:这里的方法名一定要与方法签名类中的方法一致
invocation.selector = @selector(run:);
NSString *way = @"byCar";
//这里的Index要从2开始,以为0跟1已经被占据了,分别是self(target),selector(_cmd)
[invocation setArgument:&way atIndex:2];
//3、调用invoke方法
[invocation invoke];
- (void)run:(NSString *)method{
}

你可能感兴趣的:(NSInvocation)