On 23.07.2012, at 14:04, Mike Abdullah wrote: > > On 23 Jul 2012, at 12:57, Andreas Grosam <agro...@onlinehome.de> wrote: > >> >> On 23.07.2012, at 13:09, Mike Abdullah wrote: >> >>> Aha, now we're talking. You want -initWithDictionary:copyItems: >> >> No, this is not a deep copy. >> >> Suppose, there is an element within the array, whose value is a mutable >> dictionary. If I change the that mutable dictionary (or its values), the >> copy and the dictionary would still compare equal to the copy (since >> children haven't been copied). >> >> >> Thus, I need to define a deepCopy method for NSDictionary (and NSArray, too). > > You should seriously consider whether your design is a good idea then. > Copying the objects in an array is rare, but justifiable. Having multiple > levels of nested dictionaries is rarely so. Sure you're not (ab)using > dictionaries to avoid defining a new class?
No, I don't think so. The NSDictionary/NSMutableDictionary is completely suitable for the purpose to represent that object which I have here. There is just no method to create a deep copy. (On the other hand, the isEqual method will effectively "deep" compare.) So, you might wonder why there is a need to have a deep copy? Well, how can I answer this without digressing? ;) But as an example: Suppose, there is a quite rich object represented as JSON. The JSON will be parsed and represented as a Foundation object, which is a NSDictionary. This is my object. Now suppose, there is the possibility to edit and make changes to this deep leveled object. Before making any changes in a GUI, I need to create a "Momento" (see, wiki <http://en.wikipedia.org/wiki/Memento_pattern> in order to save state of the original object and possibly be able to revert changes. Due to the lack of attributes attachable to properties in Objective-C language and a momento method (I already warned that I'll possibly digressing ;) ) I just use a deep copy for creating the momento. Sure, I could use CoreData for accomplishing this as well … but this was just an example. _______________________________________________ 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: https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com