问题:如何在 NSEnumerator 迭代中获取当前对象的索引?
(由于速度原因,我不想使用整数计数器或使用 for 循环来跟踪事物。我之前做过,只是不记得我是怎么做的......)
问题:如何在 NSEnumerator 迭代中获取当前对象的索引?
(由于速度原因,我不想使用整数计数器或使用 for 循环来跟踪事物。我之前做过,只是不记得我是怎么做的......)
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:
也不鼓励为此目的使用这种技术。
NSArrayindexOfObject:
将遍历所有元素,直到一个YES
从isEqual:
消息返回(可能包括进一步的消息发送)。
您要求索引,因此我们可以假设您使用的是数组。如果是这样的话:
[array indexOfObject:currentObject];
适用于大多数情况(但不是全部)。但是,总体而言,切换到使用带有 int 计数器的普通 for 循环会更快。