问:如何在NSEnumerator迭代中获取当前对象的索引?
(由于速度的原因,我不想使用整数计数器或for循环来跟踪事情。我以前做过,我只是不记得我是怎么做的……)
发布于 2010-05-19 21:48:33
在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 (可能包括进一步的消息发送)。
发布于 2010-05-19 21:38:59
您正在请求一个索引,因此我们可以假定您正在使用一个数组。如果是这样的话:
[array indexOfObject:currentObject];适用于大多数情况(但不是所有情况)。但是,总体来说,切换到使用带有int计数器的普通for循环会更快。
https://stackoverflow.com/questions/2865711
复制相似问题