NSArray objectAtIndex: 的简写是什么?

25

可能重复:
在Objective-C中是否有字典或数组的文字语法?

我最近注意到在objective-c中似乎有一些奇怪的东西可以使用。

当我有一个数组时,

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

我通常可以通过以下方式访问第二个元素:

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

然而,我现在似乎也能够通过它进行访问。

NSString *element = myArray[1];

有人知道这是否已成为一种定义行为,因此可以安全使用,还是应该避免使用?感谢任何能够帮助的人!!


抱歉,我不太确定如何搜索它。 - George Green
感谢大家的回答!! :) - George Green
4个回答

29
这个语法在Clang 3.3中添加:Objective C Literals。本质上,编译器将类型为objCObj[idx]的表达式转换为表达式[objCObj objectAtIndexedSubscript:idx]。它也适用于字典,并且您可以自由地采用它来处理您自己的对象。
因此,如果您使用的是现代版本的Objective C和经过适当更新的Objective C编译器(即Clang),那么使用它是完全安全的。

苹果在速记方面搞砸了。那个“如果它没有坏,就不要修理它”的原则去哪里了? - Jacksonkr

4

这是Objective-C的一个新功能,并且自xCode 4.5以来就可用。

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


2

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

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

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


2

这是最新版本的LLVM编译器所支持的有效代码。目前,其他编译器(例如GCC)不支持。

是否应该避免使用它 - 这取决于个人喜好。因为索引行为略有不同(使用了完全不同的方法来实现),因此互联网上有几次大讨论。

还有一些关于是否使用表达式字面量的讨论,因为它们有时会使代码变得不太可读(例如,它们像字面值一样书写,但实际上是自动释放的对象)。请注意,使用字面量完成的所有操作都可以使用简单的宏完成。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接