Re: ARC Extending Lifetime of Objects
Re: ARC Extending Lifetime of Objects
- Subject: Re: ARC Extending Lifetime of Objects
- From: Andreas Grosam <email@hidden>
- Date: Mon, 23 Jul 2012 15:12:39 +0200
On 23.07.2012, at 14:04, Mike Abdullah wrote:
>
> On 23 Jul 2012, at 12:57, Andreas Grosam <email@hidden> 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 (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