Re: remove elements during the iteration on NSMutableDictionary
Re: remove elements during the iteration on NSMutableDictionary
- Subject: Re: remove elements during the iteration on NSMutableDictionary
- From: Negm-Awad Amin <email@hidden>
- Date: Wed, 6 Aug 2008 16:56:49 +0200
Am Mi,06.08.2008 um 16:48 schrieb Wayne Shao:
On Wed, Aug 6, 2008 at 7:41 AM, Negm-Awad Amin <negm-
email@hidden> wrote:
Am Mi,06.08.2008 um 16:27 schrieb Wayne Shao:
Hi
Please see the question in the comments of the following code.
NSMutableDictionary* aDictionary = (initialized with some objects)
for (id theKey in aDictionary) {
id anObject = [[aDictionary objectForKey:theKey] retain];
[aDictionary removeObjectForKey:theKey];
// Question: will this removal break or corrupt the loop of
enumerating the
elements?
[anObject someMessage];
}
in java, Iterators allow the caller to remove elements from the
underlying
collection during the iteration. is there similar semantics in
objective-c?
http://developer.apple.com/documentation/Cocoa/Conceptual/ObjectiveC/Articles/chapter_8_section_1.html#/
/apple_ref/doc/uid/TP30001163-CH18-SW1
Enumeration is "safe"—the enumerator has a mutation guard so that if
you attempt to modify the collection during enumeration, an
exception is raised.
Oh. thanks for the info. Is there an alternative method to remove
during a loop? (besides the option to remove elements outside of
the loop).
Copy the collection in front of the loop and iterate through that
copy. In your special case you can iterate through a keys-array:
NSArray* keys = [aDcitionary allKeys];
for( key in keys ) {
…
Amin
Amin
BTW: This looks like a memory leak …
fixed?
for (id theKey in aDictionary) {
id anObject = [[aDictionary objectForKey:theKey] retain];
[aDictionary removeObjectForKey:theKey];
// Question: will this removal break or corrupt the loop of
enumerating the
elements?
[anObject someMessage];
[anObject release];
}
--
Wayne Shao
_______________________________________________
Cocoa-dev mailing list (email@hidden)
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:
This email sent to email@hidden
Amin Negm-Awad
email@hidden
--
Wayne Shao
Amin Negm-Awad
email@hidden
_______________________________________________
Cocoa-dev mailing list (email@hidden)
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:
This email sent to email@hidden