Re: Questions regarding release
Re: Questions regarding release
- Subject: Re: Questions regarding release
- From: Mike Abdullah via Cocoa-dev <email@hidden>
- Date: Fri, 27 Sep 2019 11:58:47 +0100
> On 27 Sep 2019, at 00:43, James Walker via Cocoa-dev
> <email@hidden> wrote:
>
> On 9/26/19 4:20 PM, Gabriel Zachmann via Cocoa-dev wrote:
>>> The issue in the below code to my eye is that you allocate a path with
>>> CGPathCreateWithRect (+1) but then don't release it.
>>>
>>> In that case, I am wondering:
>>> doesn't ownership pass to the textlayer ?
>>> If yes, shouldn't textlayer release the path when it gets destroyed by the
>>> ARC?
>>>
>>> CALayer will indeed release shadowPath when it’s deallocated. However,
>>> CALayer.setShadowPath doesn’t expect to be passed a +1 reference, so it
>>> will retain/copy its argument, and it’s that retain which will be balanced
>>> by the release during object destruction. Functions and methods generally
>>> do not expect to be passed +1 objects.
>> So, if I understand you correctly, I should do this:
>> textlayer.shadowPath = CGPathCreateWithRect( textlayer.bounds, NULL );
>> CFRelease( textlayer.shadowPath )
>> ?
>> Is that correct?
>
> That's not completely clear. The documentation on shadowPath says "The value
> of this property is retained using the Core Foundation retain/release
> semantics". However, a comment in CALayer.h says "Upon assignment the path
> is copied." If that's true, you'd be releasing the copy, not the original.
> It would be safer to say:
>
> CGPathRef thePath = CGPathCreateWithRect( textlayer.bounds, NULL );
> textlayer.shadowPath = thePath;
> CFRelease( thePath );
This one. This is the correct approach.
_______________________________________________
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