I've got an NSArray and have to iterate over it in a special case backwards, so that I first look at the last element. It's for performance reasons: If the last one just makes no sense, all previous ones can be ignored. So I'd like to break the loop. But that won't work if I iterate forward from 0 to n. I need to go from n to 0. Maybe there is a method or function I don't know about, so I wouldn't have to re-invent the wheel here.
+5
A:
Since this is for performace, you have a number of options and would be well advised to try them all to see which works best.
- -[NSArray reverseObjectEmumerator]
- Create a copy of the array where the order of the elements is reversed and then iterate that array as you would normally.
- Use a standard C for loop and start and work backwards through the array.
More extreme methods (if performance is super-critical)
- Read up on how Cocoa implements fast object enumeration and create your own equivalent in reverse.
- Use a C or C++ array.
There may be others. In which case, anyone feel free to add it.
Mike Abdullah
2009-05-09 23:45:00
+18
A:
To add on the other answers, you can use -[NSArray reverseObjectEnumerator]
in combination with the fast enumeration feature in Objective-C 2.0 (available in Leopard, iPhone):
for (id someObject in [myArray reverseObjectEnumerator])
{
// print some info
NSLog([someObject description]);
}
Source with some more info: http://cocoawithlove.com/2008/05/fast-enumeration-clarifications.html
sjmulder
2009-05-10 00:16:19