NSMutableSet *set = [NSMutableSet set];
NSString *stuff = @"Stuff";
SEL selector = @selector(addObject:);
NSMethodSignature *sig = [set methodSignatureForSelector:selector];
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:sig];
[invocation setTarget:set];
[invocation setSelector:selector];
//将第一个参数放在index2
[invocation setArgument:&stuff atIndex:2];
[invocation invoke];
index 0 是target(self) index 1 是selector(_cmd). 需要注意的是传递的是指针(&stuff),而不是变量本身。
Invocation 很灵活,但是却很慢。
创建一个invocation比直接调用方法会慢很多。但是执行Invocation很cheap,并且Invocation是可以复用的。