有没有区别
NSArray *myArray = @[objectOne, objectTwo, objectThree];
和
NSArray *myArray = [NSArray arrayWithObjects:objectOne, objectTwo, objectThree, nil];
一个比另一个更受欢迎吗?
有没有区别
NSArray *myArray = @[objectOne, objectTwo, objectThree];
和
NSArray *myArray = [NSArray arrayWithObjects:objectOne, objectTwo, objectThree, nil];
一个比另一个更受欢迎吗?
它们几乎相同,但不完全一样。关于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];
在这种情况下,将创建一个包含一个元素的数组。
不。在编译时,@[...]
文字将更改为arrayWithObjects:
唯一的区别是@[...]
仅在较新版本的 LLVM 编译器中受支持。