使用@ [array,of,items] vs [NSArray arrayWithObjects:]

时间:2013-01-25 17:49:59

标签: objective-c nsarray objective-c-literals

之间有区别吗?
NSArray *myArray = @[objectOne, objectTwo, objectThree];

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

是一个优先于另一个吗?

2 个答案:

答案 0 :(得分: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];
在这种情况下,

会创建一个包含一个元素的数组。

答案 1 :(得分:-2)

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

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

相关问题