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;
    }


-- 
Greg Parker     gpar...@apple.com     Runtime Wrangler



_______________________________________________

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