Re: Asymmetrical behavior in NSMutableArray
Re: Asymmetrical behavior in NSMutableArray
- Subject: Re: Asymmetrical behavior in NSMutableArray
- From: Serge Meynard <email@hidden>
- Date: Thu, 10 Mar 2005 00:57:03 -0500
Greetings,
I just discovered something interesting behavior-wise in
NSMutableArray... Since the class does not handle duplicates, you can
add the same object several times to an array and it will appear in
several slots. But if you then call removeObject: on that same
object, ALL INSTANCES of the object are removed from the array! I
wrote a short test app to confirm that I wasn't dreaming this up.
Is this normal, expected behavior? Shouldn't the class stick to never
handling duplicates no matter the method call?
The API docs for NSMutableArray say [1]...
"Removes all occurrences of anObject in the receiver. This method uses
indexOfObject: to locate matches and then removes them by using
removeObjectAtIndex:. Thus, matches are determined on the basis of an
object’s response to the isEqual: message."
So yes this is expected and documented behavior of that method.
Hmmm, yes it does say that... Doh! I guess I read over that bit too
fast. Sorry about that.
Maybe what you want to use is... removeObjectIdenticalTo: ? (not
knowing what behavior you want)
"Removes all occurrences of anObject in the receiver. This method uses
the indexOfObjectIdenticalTo: method to locate matches and then
removes them by using removeObjectAtIndex:. Thus, matches are
determined using object addresses."
Or add your own method to do exactly what you want (easy to do with a
category).
-Shawn
[1]
<http://developer.apple.com/documentation/Cocoa/Reference/Foundation/
ObjC_classic/Classes/NSMutableArray.html#//apple_ref/doc/uid/20000138/
BABDAJBB>
The behavior I want (or rather, the behavior I was *expecting*) is that
if I add an object twice in an array, then I have to remove it twice
also. Or more precisely, if object A is in the array (once) and I add
it again, then remove it, it will still be there (once). I had objects
showing up twice in my lists because of the order in which things were
getting called in my code by Cocoa.
I find it odd that addObject and removeObject: would behave differently
when it comes to duplicates. It's not a huge concern, since I worked
around the problem (for now anyway) by making sure I remove things
*before* adding them again, and not the other way around. But it's not
what I'd call intuitive behavior.
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Cocoa-dev mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden