4

如果 nil 是为了标记参数的结束,那么我可以使用:

[NSArray arrayWithObjects:obj1, obj2, nil, nil, nil];

因为第一个 nil 标记数组结束,后面的两个 nil 将被忽略?

我得到了两个相反的答案,并将尝试一下。

更新:

我需要这样做的原因是我需要创建一个 UIAlertView,它可能有按钮:只有“确定”,或者“呼叫”和“取消”,所以“确定”或“取消”都是取消按钮,而“呼叫”在一种情况下是其他按钮,在其他情况下,我不需要任何其他按钮,这就是我需要这样做的原因。

4

4 回答 4

12

当您nil在创建时放置时,会添加NSArray最多的对象。nil之后的niland 对象被忽略。只是为了完成,您也不能添加 (例如使用方法)并且这样做会引发异常。nilNSMutableArrayaddObject:

您可以[NSNull null];在创建 NSArray 时放置。

于 2012-10-16T05:29:23.380 回答
5

在末尾添加 nil 并不是要将 nil 添加到数组中,它只是 C 如何处理 ... 变量参数列表的工件。它与 NSArray 或 NSMutableArray 无关,你不能在其中存储 nil。

所以编译器是否接受,nil,nil,nil实际上是无关紧要的。编译器将在第一个 nil 处停止读取。并且首先编写该代码显示了对 obj C 集合和 var arg 方法的误解。

为什么不使用新的文字语法,只是说

NSArray *myArray = @[@"bla", @"bla", @"bla"];

无论哪种方式,额外的 nil 都与您提供的语法无关。

于 2012-10-16T07:36:51.567 回答
2

是的,确切地说,这是可以做到的。第一个之后的 nil 将被忽略。

于 2012-10-16T05:28:11.337 回答
-1

为什么要故意将 nil 添加到数组中?我认为你最好停下来,三思而后行,为什么要这么做。如果您不确定数组的大小,可以随时使用 NSMutableArray。

于 2012-10-16T05:42:59.930 回答