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

Reply via email to