为什么快速枚举比普通迭代更快?

3

我知道什么是快速枚举以及它在Objective-C中的作用。我想知道为什么快速枚举比正常迭代更快?


1
它之所以被称为快速枚举,是有原因的 - 参见:http://cocoawithlove.com/2008/05/fast-enumeration-clarifications.html - Soorajlal K G
1个回答

5

它是一种高级语言结构,因此可以进行更好的优化:

例如,考虑迭代一个NSArray

for (NSUInteger i = 0; i < [array count]; i++) {
    id object = [array objectAtIndex:i];
}

每次迭代都会有两个方法调用。 .count 是一个方法调用。 .objectAtIndex 是一个方法调用。方法调用速度较慢。

虽然我们可以解决第一个问题,例如

NSUInteger count = [array count];
for (NSUInteger i = 0; i < count; i++) {

我们无法修复第二个问题。

快速枚举可以将项目加载到C数组中并快速迭代它们,无需调用方法。另外,另一个很大的改进是减少检查是否 i 在数组的边界内(使用需要每次迭代进行一次比较的for i!)。

当然,还有更多可能的改进,但重要的是让编译器知道我们想做什么,而不是告诉它我们想如何做到这一点。编译器可以比我们做得更好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接