Objective C可变参数函数的第一个参数是强制性的吗?

S B*_*S B 7 function objective-c variadic-functions

这是Obj C中可变函数的一个例子.

// This method takes an object and a variable number of args
- (void) appendObjects:(id) firstObject, ...;
Run Code Online (Sandbox Code Playgroud)

将第一个参数作为Obj C对象真的是强制性的吗?如果没有,那么语法应该是什么?

编辑:感谢您的回复 - 第一个参数不需要是一个NSObject,但我想问的是:是否有可能完全取消第一个参数? 我可能第一次没有很好地解决这个问题; 对于那个很抱歉

- (void) appendObjects: ...;
Run Code Online (Sandbox Code Playgroud)

上述声明引发以下错误: Expected ';' after method prototype

dre*_*lax 8

它不一定是真的.每个Objective-C方法都有两个隐藏的参数self,并且_cmd(按此顺序).self是不言自明的(哈哈),但是鲜为人知的是_cmd,它只是用于调用当前方法的选择器.这使得可以使用带有Objective-C方法的可变参数,而不像使用标准可变参数C函数那样使用初始参数.

- (void) someMethod:...
{
    va_list va;

    va_start(va, _cmd);

    // process all args with va_arg

    va_end(va);
}
Run Code Online (Sandbox Code Playgroud)

然后你可以调用这样的方法:

 [someObj someMethod:1, 2, 3];
Run Code Online (Sandbox Code Playgroud)