NSArray objectAtIndex:速记

时间:2013-02-05 13:45:35

标签: ios objective-c nsarray shorthand

  

可能重复:
  Is there some literal dictionary or array syntax in Objective-C?

我最近注意到一些奇怪的东西似乎在objective-c中起作用。

当我有一个数组时,

NSArray *myArray = @[@"1", @"b", @"3", @"d"];

我通常可以通过

访问第二个元素
NSString *element = [myArray objectAtIndex:1]; // second element 

但是我现在似乎也可以通过它访问它。

NSString *element = myArray[1];

有没有人知道这现在是一个定义的行为,因此可以安全使用,还是应该避免使用它?感谢任何可以帮助的人!!

4 个答案:

答案 0 :(得分:29)

在Clang 3.3中添加了这种语法:Objective C Literals。实质上,编译器将类型objCObj[idx]的表达式转换为表达式[objCObj objectAtIndexedSubscript:idx]。它也适用于字典,您可以自由地将它用于自己的对象。

因此,假设您将使用现代版本的Objective C和适当更新的Objective C编译器(即Clang),那么您使用它是完全安全的。

答案 1 :(得分:4)

这是objective-c的一个新功能,自xCode 4.5起可用

使用这种语法是安全的,你甚至可以为此提供自己的类支持。

答案 2 :(得分:2)

Ya,使用这些语法是安全的。

这些语法是Modern Objective-C的一部分。

您可以查看此文章以获取更多选项:ObjectiveCLiterals

答案 3 :(得分:2)

这是最新版LLVM编译器的完美有效代码。 到目前为止,它对其他编译器(例如GCC)无效。

你是否应该避免 - 嗯,这是一个品味问题。因为索引行为略有不同(使用完全不同的方法来实现它),因此在互联网上有几个关于它的大讨论。 还有讨论是否使用表达式文字,因为当它们使代码可读性较低时存在(例如,它们像文字一样写,但它们实际上是自动释放的对象)。请注意,使用文字完成所有操作都可以使用简单的宏完成。