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中的对象的。