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

Bot*_*Bot 11 objective-c nsarray objective-c-literals

两者之间有区别吗?

NSArray *myArray = @[objectOne, objectTwo, objectThree];
Run Code Online (Sandbox Code Playgroud)

NSArray *myArray = [NSArray arrayWithObjects:objectOne, objectTwo, objectThree, nil];
Run Code Online (Sandbox Code Playgroud)

一个比另一个更受欢迎吗?

Mar*_*n R 32

它们几乎相同,但不完全相同.关于Objective-C Literals的Clang文档说明:

数组文字表达式扩展为调用 +[NSArray arrayWithObjects:count:],验证所有对象都是非零的.可变形式+[NSArray arrayWithObjects:]使用nil作为参数列表终止符,这可能导致格式错误的数组对象.

所以

NSArray *myArray = @[objectOne, objectTwo, objectThree];
Run Code Online (Sandbox Code Playgroud)

如果objectTwo == nil,但会抛出运行时异常

NSArray *myArray = [NSArray arrayWithObjects:objectOne, objectTwo, objectThree, nil];
Run Code Online (Sandbox Code Playgroud)

在这种情况下会创建一个包含一个元素的数组.

  • +1这是正确的答案; 区别是微妙的,但两者是不同的. (5认同)