我知道,如果有一个循环修改循环中项目的计数,那么在集合上使用nseNumerator是确保代码爆炸的最佳方法,但是我想了解nseNumerator类和一个旧的循环学派之间的性能权衡

最佳答案

在ObjuleC 2中使用新的for (... in ...)语法通常是迭代一个集合最快的方法,因为它可以在堆栈上维护缓冲区,并将批处理放入其中。
使用NSEnumerator通常是最慢的方式,因为它经常复制被重复的集合;对于不可变的集合,这可能是便宜的(等价于-retain),但是对于可变集合,它可以导致不可变的副本被创建。
做自己的迭代(例如,使用-[NSArray objectAtIndex:])通常会介于两者之间,因为当您没有潜在的复制开销时,也不会从基础集合中获得批处理对象。
(ps-这个问题应该标记为objective-c,而不是c,因为NSEnumerator是cocoa类,新的for (... in ...)语法是objective-c特有的。)

10-07 16:34