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,但这似乎并不像这样做那么高效.
不.快速枚举是一种维护迭代状态的技术,使得对集合的迭代更有效.它克服了许多集合没有在O(1)中索引的事实,因此通过索引迭代它们将比O(N)更大.由于方法调用(例如objectAtIndex:)的成本,即使在O(1)中进行索引的集合也可能遭受大的恒定时间.如果你看一下NSFastEnumeration协议,你会发现它依赖于创建高效索引的C数组.
for增加整数(可能优化为寄存器)的循环不会出现同样的问题,快速枚举也不能提供解决方案.
当然,如果// stuff!确实包含索引self,那么快速枚举会好得多(并且你根本不应该使用索引),但问题暗示事实并非如此.
| 归档时间: |
|
| 查看次数: |
58 次 |
| 最近记录: |