On 22 Aug 2008, at 7:10 pm, Phil wrote:

From the -reverseObjectEnumerator 'special considerations' section of
the documentation:
"When you use this method with mutable subclasses of NSArray, you must
not modify the array during enumeration."


You shouldn't go modifying the array in general, for sure. But the special case of modification by deleting the last item in the array is safe, and always will be. In fact deleting any item with a higher index than current is safe, and always will be. Why? Because an ordinary for loop that counts down is free to do this and the existence of such loops in shipped code means that NSMutableArray can never be changed in such a way as to break code like that. (It's also hard to see how it could be, even theoretically).

-reverseObjectEnumerator is no different, because it "lets you access each object in the receiver, in order, from the element at the highest index down to the element at index 0". This statement will hold true for any future implementation of NSMutableArray, meaning that it is now, and always will be safe to delete items in the array at or higher than the current index. By the definition of an array, removing an item only affects the indexes of objects with equal or greater indexes than the removed item.

But be clear, this is a special case, so the warning about modification *in general* should be heeded.

In the OP's case of weeding out unwanted file extensions from a list, using a reverse enumerator to do this is quite safe. The argument may well be moot in these days of fast enumerators though. It's also trivial to make a copy and iterate that, as Andrew suggested, though with very huge arrays, that copy might be worth avoiding.

Graham
_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to [EMAIL PROTECTED]

Reply via email to