在Objective-C中,为什么';t arrayWithObjects是否自动向列表末尾添加一个nil?

在Objective-C中,为什么';t arrayWithObjects是否自动向列表末尾添加一个nil?,objective-c,cocoa,Objective C,Cocoa,可能重复: 据说我们需要始终使用nil作为arrayWithObjects的最后一项: NSArray *wordList = [NSArray arrayWithObjects: @"hello", @"world", nil]; 为什么不能arrayWithObjects不需要nil,只需为我们添加nil。一些论坛说这是因为nil充当了其他方法的哨兵。。。但这不是一个不应该与类的用户相关的实现问题吗 例如,如果其他语言需要 list = [1 ,2, nil] # Ruby 构

可能重复:

据说我们需要始终使用
nil
作为
arrayWithObjects
的最后一项:

NSArray *wordList = [NSArray arrayWithObjects: @"hello", @"world", nil];
为什么不能
arrayWithObjects
不需要
nil
,只需为我们添加
nil
。一些论坛说这是因为
nil
充当了其他方法的哨兵。。。但这不是一个不应该与类的用户相关的实现问题吗

例如,如果其他语言需要

 list = [1 ,2, nil]    # Ruby

构建数组可能有点奇怪。

因为自动插入nil需要某种语言或编译器扩展

在可变列表的情况下,实现需要终止符来知道何时停止读取


幸运的是,您的编译器支持sentinel属性,因此如果您打开并注意编译器警告,这应该不是问题。

因为它不知道如何操作。这是一个标准的可变长度parm列表,必须有某种计数或结束标记才能知道长度。这可以用宏来完成,但除此之外,@HotLicks所说的是正确的。这样的编译器扩展是错误的!哈利路亚!不可能将
arraywhithobjects
添加
hello
world
,然后添加
nil
@動靜能量:
nil
不是数组的一部分;它用于查找参数列表的结尾。方法本身无法知道它得到了多少个参数。@IuliusCæsar是的-确实是个好消息:)@動靜能量 好的,您可以创建一些方便的方法/函数,如果这对您的案例实际有用的话(编写起来相当复杂,但是可以使用增强的检查)。