0

我对一个问题感到困惑。看一个例子:

-(void)DIYLog:(NSString *)format, ...
{
   NSLog(...);
}

这只是一个有趣的例子。我们都知道我们不能将“...”作为参数传递给 NSLog。所以我很好奇将一个“可变参数”传递给另一个。我已经知道参数是通过寄存器或堆栈传递的,但是,关键是,我如何在 Objective-C 或 C 中实现它。


我想我让你误会了。NSLog 只是一个需要解释的例子。让我再做一个。这是关于将参数传递给id objc_msgSend(id self, SEL op, ...)

-(void)DIY_msgSend:(id)target selector:(SEL)op params:(id)param, ...
{
    objc_msgSend(target, op, ...);
}

所以,关键是,我如何将这些可变参数传递给另一个也需要可变参数的函数。

4

1 回答 1

4

Cva_list类型可以从可变参数创建并传递给接受va_list参数的函数/方法。例如:

- (void)logFormat:(NSString *)format, ...
{
    va_list args;
    va_start(args, format);
    NSLogv(format, args);
    va_end(args);
}

但是,没有va_list像您想要的那样将 a 传递给标准可变参数函数的可移植方式。

于 2013-10-04T15:18:27.220 回答