> Hmm… I’m not so sure that this is *quite* right… what if I want a copy of the 
> original object, with the same creation date? Not doing so could lead to some 
> strange pitfalls, depending on what is then done with the alleged “copy”, and 
> how it reacts to other methods (like -hash and -isEqual, or any sort of 
> serialization methods it implements).

Well you have to write a copy method so you can do whatever you want either 
keep the same creation date or change it.


> "The exact meaning of “copy” can vary from class to class, but a copy must be 
> a functionally independent object with values ___identical___ to the original 
> at the time the copy was made.” (emphasis mine)

it’s up to you (or the class) to decide what a “copy” means, but the Cocoa 
classes that support copying define their own version of what a copy is.

Don’t forget there are two ways to test that two objects are “Equal”, 

object1 == object2                      //Exactly the same object as so by 
definition Equal

[object1 isEqual:object2]               //Functionally Equal

So in the case of the creation date, isEqual would not check the date property 
in the comparison if it didn’t matter…..

> Which, IMHO, means that *all* the values stored in the object must be the 
> same.

All non-object values should be identical, objects should be *functionally* 
identical (and *you* define what functional means, if you need the same 
creation date in one class and a new one in another that’s ok, they function 
differently).

All the Best
Dave



> On 11 Aug 2016, at 09:50, Britt Durbrow 
> <bdurb...@rattlesnakehillsoftworks.com> wrote:
> 
> 
>> On Aug 11, 2016, at 12:04 AM, Quincey Morris 
>> <quinceymor...@rivergatesoftware.com> wrote:
>> 
>> 2. The fact than an object is immutable does not (in general) mean that a 
>> copy can be represented by the same object reference. For example, an object 
>> that contained its own date of creation might be immutable, but a copy might 
>> have a different date, and therefore be a different object. Putting this 
>> another way, the immutability does not make NSCopying conformance irrelevant.
> 
> Hmm… I’m not so sure that this is *quite* right… what if I want a copy of the 
> original object, with the same creation date? Not doing so could lead to some 
> strange pitfalls, depending on what is then done with the alleged “copy”, and 
> how it reacts to other methods (like -hash and -isEqual, or any sort of 
> serialization methods it implements).
> 
> From the documentation:
> 
> "The exact meaning of “copy” can vary from class to class, but a copy must be 
> a functionally independent object with values ___identical___ to the original 
> at the time the copy was made.” (emphasis mine)
> 
> Which, IMHO, means that *all* the values stored in the object must be the 
> same.
> 
> By extension; [anObject hash] and [[anObject copy] hash] must return the same 
> value; and [anObject isEqual:[anObject copy]] must return YES.
> 
> For the case of an immutable object, those conditions are indeed fulfilled by 
> simply returning self; because by definition an immutable object and a copy 
> of an immutable object at a different memory address would behave the same, 
> forever. Returning self is, in this case, just an implementation detail (an 
> optimization, specifically).
> 
> It is, however, perfectly valid (if not encouraged for performance and memory 
> use reasons) to actually create a new object, with all the same values as the 
> original.
> 
> 
> At a higher level, instead of having -copy return an object that was *almost* 
> a copy; I think I would (if possible) refactor the problem to put that 
> information somewhere else… or better yet, don’t do that at all (and given 
> that copies come and go; I don’t think that non-invariant metadata like that 
> is going to do what is usually desired, in the broader sense of solving the 
> problem at hand; whatever problem it may be).
> _______________________________________________
> 
> 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/dave%40looktowindward.com
> 
> This email sent to d...@looktowindward.com


_______________________________________________

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