1 | 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是可以复用的。