2010-05-19 122 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

相關問題