假设我有1到450的NSNumbers。我可以选择将它们添加到NSMutableArray中,从1开始到450结束,或从450开始到1结束。如果我可以开始,我的代码会更简单一些1,以450结束,但是当我最终计算出数组时,我最终需要反转它。换句话说,我需要枚举中的第一个对象为450,最后一个对象为1.
因为我的代码会更简单,如果我这样做(从1开始添加,然后在枚举之前反转),这是我的首选方法。但是,- (NSEnumerator *)reverseObjectEnumerator
的Apple文档说:
使用快速枚举协议更有效(参见 NSFastEnumeration)。 Mac OS X v10.5上提供快速枚举 以及后来的iOS 2.0及更高版本。
那么我应该避免数组反转并简单地编写稍微复杂的代码,以便首先以所需的顺序创建NSMutableArray吗?
答案 0 :(得分:7)
您可以对NSEnumerator
实例使用快速枚举,关于快速枚举的documentation甚至使用reverseObjectEnumerator:
方法作为示例:
NSEnumerator *enumerator = [array reverseObjectEnumerator];
for (NSString *element in enumerator) {
//...
}
此外,你的问题听起来很像过早优化......
答案 1 :(得分:1)
不,您不需要编写更复杂的代码来按正确的顺序排列。 reverseObjectEnumerator可以正常工作,它只是稍微慢一些。如果性能是一个很大的问题,下面的任何一个片段都可以正常工作(两个片段在while循环中的速度越快)
// Assuming 'array' is your NSMutableArray
int i = [array count];
while(i--) {
Object *current = [array objectAtIndex:i];
// Mess around with current
}
那将以450开始并以0结束。您也可以使用for循环来执行此操作,但您需要确保从索引449开始,或者执行类似
的操作for(int i = [array count]; i > 0 ; i--) {
Object *curreyt = [array objectAtIndex:i-1];
// Mess around with current
}