Le 9 août 2012 à 02:01, Greg Parker <gpar...@apple.com> a écrit :

> On Aug 8, 2012, at 4:52 PM, Graham Cox <graham....@bigpond.com> wrote:
>> I see that NSCopyObject is deprecated as of 10.8 (but is still being used 
>> internally).
>> 
>> This is going to be fun moving forward :) I'm not sure how binary 
>> compatibility is going to be maintained as NSCopyObject disappears, for 
>> example, in a cell subclass I might have:
>> 
>> - (id)       copyWithZone:(NSZone*) zone
>> {
>>      MyCell* copy = [super copyWithZone:zone];
>>      
>>      [copy->someInternalPointer retain];
>>      return copy;
>> }
>> 
>> This relies on the existing behaviour of NSCopyObject not retaining pointers 
>> it has copied.
>> 
>> If in future NSCell changes to use some alternative such as the ARC stuff 
>> you mention, this will now leak due to the extra retain. If I don't do the 
>> retain, it will crash on older systems due to the (later) over-release.
> 
> It's possible that NSCopyObject will live on in NSCell forever due to binary 
> compatibility constraints like you described. I don't know if there are other 
> plans here.
> 
> 
>> Is there a solution to this that will work forwards and backwards?
> 
> Use ARC in your subclass. Then you can write your subclass so that it doesn't 
> care how the superclass is implemented.
> 
> This code works under ARC whether or not the superclass used NSCopyObject:
>    - (id) copyWithZone:(NSZone*) zone
>    {
>        MyCell* copy = [super copyWithZone:zone];
>        copy->someInternalPointer = [copy->someInternalPointer copy];
>        return copy;
>    }
> 

I guess you mean:  copy->someInternalPointer = [someInternalPointer copy];

If you use copy->someInternalPointer, you rely on the fact that the superclass 
already init it with the previous value.

-- Jean-Daniel





_______________________________________________

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