Objective-C 中的参数寄存器或堆栈



我对一个问题感到困惑。请参阅示例:

-(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传递给标准可变参数函数,就像您想要的那样。

最新更新