Objective-C 你能用快速枚举代替 "for (i = 0; i < X; i++)"

Objective-C can you use fast enumeration in place of "for (i = 0; i < X; i++)"

假设我有一个像这样的基本整数迭代:

NSInteger rowCount = self.rowCount;
for (int i = 0; i < rowCount; i++) {
    // stuff!
}

有没有办法使用快速枚举块来实现?我当然可以创建一个整数数组 0 - self.RowCount,但这似乎并不比这样做更高效。

没有。快速枚举是一种维护迭代状态的技术,这样可以更有效地迭代集合。它克服了很多集合不在 O(1) 中建立索引的事实,因此通过索引对它们进行迭代将比 O(N) 更大。由于方法调用的成本(例如 objectAtIndex:),即使是在 O(1) 中进行索引的集合也可能会花费大量的常数时间。如果您查看 NSFastEnumeration 协议,您会注意到它依赖于创建高效索引的 C 数组。

一个 for 递增整数(可能被优化到寄存器中)的循环没有同样的问题,快速枚举不会提供解决方案。

当然,如果 // stuff! 确实包含对 self 的索引,那么快速枚举会好得多(你根本不应该使用索引),但问题暗示这不是事实并非如此。