我注意到两者都array[index]
可以[array objectAtIndex:index]
使用可变数组。有人可以解释它们之间的区别吗?在性能方面,哪一个是最佳实践?
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 指针类型和它的第二个参数有整数类型来声明。
从技术上讲,array[index]
语法解析为-objectAtIndexedSubscript:
对数组方法的调用。因为NSArray
,这被记录为与 相同-objectAtIndex:
。
下标机制可以扩展到其他类(包括你自己的)。理论上,这样的类可以做一些与 for 不同的事情-objectAtIndexedSubscript:
,-objectAtIndex:
但那将是糟糕的设计。
在 Xcode 4.4 之前,objectAtIndex: 是访问数组元素的标准方式。现在也可以通过方括号下标语法访问它。