为什么NSFastEnumeration快?

时间:2011-12-09 08:36:10

标签: objective-c performance cocoa iterator fast-enumeration

是否有人知道NSFastEnumeration是否真的比使用NSEnumerator或(对于数组)使用整数计数器并循环遍历元素更快(如运行时性能)?

如果它确实更快,它如何达到这个速度?

或许“快速”实际上指的是迭代代码更快?

提前致谢。

2 个答案:

答案 0 :(得分:6)

根据容器的不同,NSFastEnumeration至少与NSEnumerator一样快,但通常要快得多,因为它涉及的方法调用较少。

不必为数组中的每个项调用nextObject,而是使用NSFastEnumerator,数组可以立即返回C数组中的一个对象块。迭代C数组方式比必须进行大量方法调用更快,每个方法调用都会查找并返回一个对象。

答案 1 :(得分:5)

Fast enumeration并不比任何“for”循环快。从一般意义上讲,这是不可能的,因为基本循环已经尽可能优化。

相反,fast enumeration比使用Objective-C方法调用从Objective-C对象获取每次迭代数据的“for”或“while”循环更快。

它通过批量获取数据来实现,减少了在每次迭代时调用方法的开销。从循环内部删除方法调用也具有编译器优化优势。