什么是[index]和[array objectAtIndex:index]之间的区别?

时间:2015-03-28 15:49:51

标签: objective-c nsarray objective-c-literals

我注意到array[index][array objectAtIndex:index]都使用了可变数组。有人可以解释他们之间的区别吗?在表现方面,哪一个是最佳实践?

3 个答案:

答案 0 :(得分:3)

无。这是clang extensions for objective-c literals的一部分,是在2 - 3年前增加的。

此外:

  

数组样式下标

     

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

NSUInteger idx = ...; id value = object[idx];
     

它被翻译成了一个       致电objectAtIndexedSubscript:

id value = [object objectAtIndexedSubscript:idx]; 
     

当表达式使用整数索引写入元素时:

object[idx] = newValue;
     

它被转换为对setObject:atIndexedSubscript:

的调用
[object setObject:newValue atIndexedSubscript:idx];
     

然后对这些消息发送进行类型检查,并像显式消息一样执行   发送。必须声明用于objectAtIndexedSubscript:的方法   带有一个整数类型的参数和一些返回值   Objective-C对象指针类型。用于的方法   必须使用第一个参数声明setObject:atIndexedSubscript:   有一些Objective-C指针类型和它的第二个参数   积分型。

答案 1 :(得分:2)

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

下标机制可以扩展到其他类(包括您自己的类)。从理论上讲,这样的课程可以为-objectAtIndexedSubscript:而不是-objectAtIndex:做一些不同的事情,但这样做设计很差。

答案 2 :(得分:0)

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