5

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

4

3 回答 3

3

没有任何。这是2-3 年前添加的objective-c literals的clang 扩展的一部分。

还:

数组样式下标

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

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 指针类型和它的第二个参数有整数类型来声明。

于 2015-03-28T15:55:46.657 回答
2

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

下标机制可以扩展到其他类(包括你自己的)。理论上,这样的类可以做一些与 for 不同的事情-objectAtIndexedSubscript:-objectAtIndex:但那将是糟糕的设计。

于 2015-03-28T16:01:17.530 回答
0

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

于 2015-03-28T15:57:59.120 回答