我对一个问题感到困惑。请参阅示例:
-(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, ...);
}
所以,关键是,我如何将这些变量参数传递给另一个也需要变量参数的函数。
C va_list
类型可以从可变参数创建,并传递给接受va_list
参数的函数/方法。例如:
- (void)logFormat:(NSString *)format, ...
{
va_list args;
va_start(args, format);
NSLogv(format, args);
va_end(args);
}
但是,没有可移植的方法可以将va_list
传递给标准可变参数函数,就像您想要的那样。