之间有区别吗?
NSArray *myArray = @[objectOne, objectTwo, objectThree];
和
NSArray *myArray = [NSArray arrayWithObjects:objectOne, objectTwo, objectThree, nil];
是一个优先于另一个吗?
答案 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编译器中受支持。