3

我有一个采用类似这样的可变参数的方法,参数以 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];
4

1 回答 1

5

NSInvocation 不支持可变参数方法,因此这是不可能的。(参考:https ://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSInvocation_Class/Reference/Reference.html )

NSInvocation 不支持使用可变数量的参数或联合参数调用方法。

如果该方法的替代版本采用 ava_list并且您的所有参数都是对象指针,则您可能可以像我在这里的回答中那样伪造一些东西:fake va_list in ARC

于 2013-08-01T13:34:54.793 回答