【问题标题】:Using @[array, of, items] vs [NSArray arrayWithObjects:]使用 @[array, of, items] 与 [NSArray arrayWithObjects:]
【发布时间】:2013-01-09 18:03:22
【问题描述】:

有没有区别

NSArray *myArray = @[objectOne, objectTwo, objectThree];

NSArray *myArray = [NSArray arrayWithObjects:objectOne, objectTwo, objectThree, nil];

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

【问题讨论】:

  • 对不起,我什至搜索了谷歌和这里。也许这些符号弄乱了搜索,这就是我没有得到任何相关信息的原因。
  • 这不是互相指责。实际上,当我投票关闭时,系统会代表我创建该评论。

标签: objective-c nsarray objective-c-literals


【解决方案1】:

它们几乎相同,但不完全一样。 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 这是正确答案;差异是微妙的,但两者是不同的。
  • 我不确定“格式错误的数组对象”是什么意思,但数组会非常好,只是不是您认为的长度。此外,我有时会故意利用 nil 终止行为,以拥有一个可选的最后一个元素,该元素仅在它不是 nil 时才包含。
【解决方案2】:

没有。在编译时,@[...] 文字将更改为 arrayWithObjects:

唯一的区别是 @[...] 仅在较新版本的 LLVM 编译器中受支持。

【讨论】:

  • 不,是arrayWithObjects:count:
猜你喜欢
  • 1970-01-01
  • 2012-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-28
  • 1970-01-01
  • 2021-04-15
相关资源
最近更新 更多