2013-02-05 49 views
23

可能重复:
Is there some literal dictionary or array syntax in Objective-C?NSArray的objectAtIndex:速记

我最近注意到一些奇怪的事情似乎在Objective-C的工作。

当我有一个数组,

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

我通常可以访问由第二元件,

NSString *element = [myArray objectAtIndex:1]; // second element 

但是我似乎现在还能够通过访问它。

NSString *element = myArray[1]; 

有谁知道这是现在定义的行为,因此安全使用,还是应该避免它?感谢任何能提供帮助的人!!

+0

对不起,不太清楚如何搜索它。 –

+0

感谢大家的回答! :) –

回答

28

此语法添加到Clang 3.3中:Objective C Literals。本质上,编译器将objCObj[idx]类型的表达式转换为表达式[objCObj objectAtIndexedSubscript:idx]。它也适用于字典,你可以自由地将它用于你自己的对象。假设你将使用Objective C的一个现代版本和适当更新的Objective C编译器(即Clang),那么你完全可以安全地使用它。

+0

苹果已经取消了速记..发生了什么事*“如果它没有坏,不解决它”*? – Jacksonkr

4

这是因为Xcode的4.5

其安全地使用此语法,你甚至可以给自己的类,对此表示支持Objective-C和缴费的一项新功能。

2

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

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

您可以检查此文章为更多的选择:ObjectiveCLiterals

2

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

是否应该避免它 - 这是一个品味问题。在互联网上有很多关于它的大讨论,因为索引的表现略有不同(使用完全不同的方法来实现它)。 也有讨论是否使用表达式文字,因为当使代码不易读时(例如它们被写成文字,但它们实际上是自动释放对象),则会出现ocassions。请注意,一切都是使用文字完成的,可以使用简单的宏来完成。