我知道什么是快速枚举及其在目标C中的目的。我想知道为什么快速枚举比正常迭代更快?
答案 0 :(得分: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
需要每次迭代进行一次比较!)。
当然,还有更多可能的改进,但重要的是让编译器知道我们想要做什么而不告诉它我们究竟想要做什么。编译器可以比我们更好地完成任务。