Objective c 数组[index]和[array objectAtIndex:index]之间有什么区别?

Objective c 数组[index]和[array objectAtIndex:index]之间有什么区别?,objective-c,nsarray,objective-c-literals,Objective C,Nsarray,Objective C Literals,我注意到array[index]和[array objectAtIndex:index]都使用可变数组。有人能解释一下他们之间的区别吗?就性能而言,哪一种是最佳做法?无。这是2-3年前增加的一部分 此外: 数组样式订阅 当下标操作数具有整数类型时,表达式为 重写为使用两个不同选择器中的一个,具体取决于 正在读取或写入元素。当表达式读取 使用整数索引的元素,如以下示例所示: NSUInteger idx = ...; id value = object[idx]; 它被翻译成 调用objectA

我注意到
array[index]
[array objectAtIndex:index]
都使用可变数组。有人能解释一下他们之间的区别吗?就性能而言,哪一种是最佳做法?

无。这是2-3年前增加的一部分

此外:

数组样式订阅

当下标操作数具有整数类型时,表达式为 重写为使用两个不同选择器中的一个,具体取决于 正在读取或写入元素。当表达式读取 使用整数索引的元素,如以下示例所示:

NSUInteger idx = ...; id value = object[idx];
它被翻译成 调用
objectAtIndexedSubscript:

id value = [object objectAtIndexedSubscript:idx]; 
[object setObject:newValue atIndexedSubscript:idx];
表达式使用整数索引写入元素时:

object[idx] = newValue;
它被转换为对
setObject:atIndexedSubscript:

id value = [object objectAtIndexedSubscript:idx]; 
[object setObject:newValue atIndexedSubscript:idx];
然后,这些消息发送会像显式消息一样进行类型检查和执行 发送。必须声明用于
objectAtIndexedSubscript:
的方法 使用整型参数和返回值 Objective-C对象指针类型。使用的方法
setObject:atIndexedSubscript:
必须与其第一个参数一起声明 具有某种Objective-C指针类型,其第二个参数具有 整型


在Xcode 4.4之前,objectAtIndex:是访问数组元素的标准方法。
现在也可以通过方括号下标语法访问它。

从技术上讲,
数组[index]
语法解析为对数组的
-objectAtIndexedSubscript:
方法的调用。对于
NSArray
,这与
-objectAtIndex:
相同


订阅机制可以扩展到其他类(包括您自己的类)。理论上,这样一个类可以为
-objectatindexsubscript:
做一些与
-objectAtIndex:
不同的事情,但这将是糟糕的设计。

在性能方面没有区别。这只是C和Objective在语法上的不同C@Osama在本例中,这不是C数组语法。这是从NSArray访问元素的现代Objective-C语法。以“C程序员熟悉的”方式使用
[]
的表示法相对较新。这与
objectAtIndex
之间的piddlin'细节有一些不同,但出于所有目的,它们是相同的。它与Xcode无关。它与clang的版本有关——Objective-C编译器。而且这与标准阵列访问无关。这是关于访问NSArray中的对象的。