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

bra*_*ipt -3 objective-c fast-enumeration objective-c-blocks

假设我有一个基本的整数迭代,如下所示:

NSInteger rowCount = self.rowCount;
for (int i = 0; i < rowCount; i++) {
    // stuff!
}
Run Code Online (Sandbox Code Playgroud)

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

Rob*_*ier 5

不.快速枚举是一种维护迭代状态的技术,使得对集合的迭代更有效.它克服了许多集合没有在O(1)中索引的事实,因此通过索引迭代它们将比O(N)更大.由于方法调用(例如objectAtIndex:)的成本,即使在O(1)中进行索引的集合也可能遭受大的恒定时间.如果你看一下NSFastEnumeration协议,你会发现它依赖于创建高效索引的C数组.

for增加整数(可能优化为寄存器)的循环不会出现同样的问题,快速枚举也不能提供解决方案.

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