12

有没有区别

NSArray *myArray = @[objectOne, objectTwo, objectThree];

NSArray *myArray = [NSArray arrayWithObjects:objectOne, objectTwo, objectThree, nil];

一个比另一个更受欢迎吗?

4

2 回答 2

32

它们几乎相同,但不完全一样。关于Objective-C Literals的 Clang 文档指出:

数组文字表达式扩展为对 的调用 +[NSArray arrayWithObjects:count:],它验证所有对象都是非零的。可变参数形式+[NSArray arrayWithObjects:]使用 nil 作为参数列表终止符,这可能导致数组对象格式错误。

所以

NSArray *myArray = @[objectOne, objectTwo, objectThree];

如果objectTwo == nil, 但是会抛出运行时异常

NSArray *myArray = [NSArray arrayWithObjects:objectOne, objectTwo, objectThree, nil];

在这种情况下,将创建一个包含一个元素的数组。

于 2013-01-25T17:55:20.817 回答
-2

不。在编译时,@[...]文字将更改为arrayWithObjects:

唯一的区别是@[...]仅在较新版本的 LLVM 编译器中受支持。

于 2013-01-25T17:51:39.927 回答