2010-05-19 97 views
3

问:如何在NSEnumerator迭代中获取当前对象的索引?如何在NSEnumerator迭代中获取当前对象的索引?

(我不想使用整数计数器跟踪的东西,或者使用一个for循环,由于速度的原因。我这样做是之前,我只是不记得我是怎么做的?)

+0

如果整数计数器影响循环的速度,我会感到非常惊讶。除非你重复数十亿个项目,否则一个简单的计数器不会有任何明显的影响。 – Nate 2010-05-19 13:50:12

+0

谢谢。如果有人问我的问题有女朋友,我会很惊讶。 – RexOnRoids 2010-05-23 06:29:02

回答

2

令人怀疑在for循环中使用整数计数器会导致速度问题。尝试从枚举器中查找给定对象的索引比自己保留索引记录的速度慢的可能性更大。如果你想绕过重复的消息调度,看看NSArray的getObjects:range:方法。

size_t count = [myArray count]; 
id *objects = calloc(count, sizeof(id)); 

[myArray getObjects:objects range:NSMakeRange(0, count)]; 

// if you have a very large count, you'll save doing an 
// "objectAtIndex:" for each item. 

for (int i = 0; i < count; i++) 
    [objects[i] doSomething]; 

free(objects); 

你可能只看到了令人难以置信的大阵列的最小性能差异,但引擎盖下不要小看的优化。即使是getObjects:range:的文档也不鼓励使用这种技术来达到此目的。

NSArray的indexOfObject:将迭代所有元素,直到从isEqual:消息(其可能包括进一步的消息发送)返回YES

+0

哇重。你是一个职业球员。 – RexOnRoids 2010-05-20 13:52:59

1

你正在索要一个索引,所以我们可以假设你正在使用一个数组。如果是这样的:

[array indexOfObject:currentObject]; 

适用于大多数情况下工作(但不是全部)。但是,总体来说,切换到使用int计数器的普通循环会更快。

+0

嗯。 NSEnumerator? – RexOnRoids 2010-05-20 14:57:13

相关问题