我有一个方法,它接受类似这样的变量参数,参数以nil结尾。
-(void)manyParams:(NSString *)st, ... {
va_list argList;
va_start(argList,st);
id obj;
while ((obj = va_arg(argList, id))) {
NSLog(@"%@",obj);
}
va_end(argList);
return;
}
我可以像这样直接调用它
[self manyParams:@"one",@"two",@"three",nil];
如果我使用NSInvocation
类来调用manyParams,那我该怎么做呢
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature];
[invocation setTarget:self];
[invocation setSelector:@selector(manyParams:)];
///NSString *one = @"one";
///[invocation setArgument:&one atIndex:2]; //////How to pass variable arguments like @"one",@"two",@"three", nil
[invocation invoke];
答案 0 :(得分:5)
NSInvocation不支持可变方法,因此这是不可能的。 (参考:https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSInvocation_Class/Reference/Reference.html)
NSInvocation不支持使用任何方法调用方法 可变数量的参数或联合参数。
如果该方法的备用版本需要va_list
并且您的所有参数都是对象指针,那么您可能会在我的答案中伪造一些内容:fake va_list in ARC