NSArray arrayWithObjects:如果nil用于标记数组结尾,我可以... nil,nil]?

时间:2012-10-16 05:25:26

标签: objective-c nsarray null

如果nil用于标记参数的结尾,那么我可以使用:

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

作为第一个nil标记数组结束和之后的两个nils将被忽略?

我有两个相反的答案,并会尝试一下。

更新

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

4 个答案:

答案 0 :(得分:11)

当您在创建nil时添加NSArray时,会添加nil之前的对象。之后的nil和对象将被忽略。只是要完成,您can't add nilNSMutableArray也(使用addObject:方法)并且这样做会引发异常。

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

答案 1 :(得分:5)

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

因此,编译器是否接受,nil,nil,nil实际上是无关紧要的。编译器将在第一个零时停止读取。首先编写代码表明了对obj C集合和var arg方法的误解。

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

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

无论哪种方式,额外的内容都不在您提供的语法中。

答案 2 :(得分:2)

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

答案 3 :(得分:-1)

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