NSArray的@ [object]注释

时间:2012-11-12 06:14:33

标签: objective-c cocoa xcode4.5 xcode4.4

我发现看到一个特定的代码,

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
[self.tableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];

注释@[indexPath]的名称是什么,我从来没有看到过这种情况。因为它在Objective-C中引入。我知道它取代了[NSArray arrayWithObjects:indexPath,nil],还有其他任何功能吗?使用它的功能是什么(嗯,除了更短)?

感谢。

2 个答案:

答案 0 :(得分:2)

这是Objective-C中使用LLVM的“Literals”的扩展。除了创建数组之外,我不相信它会做任何其他事情。它们随Apple LLVM 4.0一起提供。

如果你想看到所有可用的文字,请查看http://clang.llvm.org/docs/ObjectiveCLiterals.html - 它们非常方便。

答案 1 :(得分:1)

这是在Xcode 4.4中使用文字的新方法 我猜没有其他好处,但它的新编码风格

很少有人提及,我希望这可以解决你的一些疑问。

int a = 2;
int b = 5;
NSNumber *n = @(a*b);

@blah被称为“文字”语法。您可以使用它来创建包含文字的对象,如char,BOOL,int等,这意味着:

  • @42是一个盒装的
  • @'c'是一个盒装字符
  • @"foo"是一个盒装的char *
  • @42ull是一个盒装的无符号长多
  • @YES是一个盒装的BOOL

at符号后面的所有内容都是原始值。 MyEnumValue不是文字。这是一个象征。为了适应这种情况,引入了通用的拳击语法:

@(MyEnumValue)

你可以在括号内放一堆东西;在大多数情况下,任何变量或表达都应该起作用。