On Aug 22, 2008, at 8:23 AM, Michael Ash wrote:
On Fri, Aug 22, 2008 at 6:23 AM, Graham Cox <[EMAIL PROTECTED]> wrote:-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 ofobjects with equal or greater indexes than the removed item.You are making a big, unwarranted assumption about how reverseObjectEnumerator works. Namely, you are assuming that it merely tracks an index, and uses -objectAtIndex: (or equivalent) to retrieve each object. What if the enumerator actually just keeps a pointer to the array's internal storage? This would be perfectly allowed by the API. But then, as you delete things, the array may decide to reallocate its internal storage, leaving the enumerator's pointer to dangle, and causing you to crash. Do not modify collections while you enumerate them. You're not allowed to. Just because it seems like maybe you ought to be allowed in this one special case doesn't make it so. If you really want to enumerate backwards while deleting items at the tail end of the array, write a manual for loop that calls -objectAtIndex: each time. This is guaranteed to work. Mike
To build on this, doesn't fast enumeration (Leopard-only, of course) raise an exception if a value is modified while the enumeration is running? (Not tested personally by me, but building upon an earlier thread from a little while back.)
Cheers, Andrew
smime.p7s
Description: S/MIME cryptographic signature
_______________________________________________ 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]