目标 c - 使用 @[array, of, items] vs [NSArray arrayWithObjects:]



两者之间有区别吗

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 编译器中受支持。

最新更新