两者之间有区别吗
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];
在这种情况下,将创建一个带有一个元素的数组。
No.在编译时,@[...]
文本将更改为arrayWithObjects:
唯一的区别是@[...]
仅在较新版本的 LLVM 编译器中受支持。