Re: Core Foundation Objects and Properties when using ARC
Re: Core Foundation Objects and Properties when using ARC
- Subject: Re: Core Foundation Objects and Properties when using ARC
- From: John McCall <email@hidden>
- Date: Fri, 11 Jan 2013 10:03:33 -0800
On Jan 10, 2013, at 4:35 PM, Dave <email@hidden> wrote:
> I've looked all over and just can't seem to find the recommended approach to handling CF objects in properties when using ARC.
>
> I have an init method that needs to create a CF object and store it as a property for use while the object is alive. When the object is released I want to release the CF Object,
>
> Code:
>
> -(id) init
> {
> // normal init code
>
>
> CFThingRef myCFThing = CFThingCreate();
>
> self.propCFThing = myCFThing;
> }
>
>
> -(void) dealloc
> {
> CFRelease(self.propCFThing);
> self.propCFThing = NULL;
> }
>
> This code gives analyzer warnings saying that a CF object has leaked.
>
> What is the best way to stop the warnings?
This isn't really about ARC. ARC doesn't currently manage objects of CF type.
If the property is really readonly except for initialization, the best pattern is to (1) mark the property readonly and (2) assign directly to the ivar in the -init method. Don't forget to also (3) release the ivar in -dealloc.
If the property is not readonly, you need a custom setter that retains the new value and releases the old. Calling that setter in -init with a +1 object really would be a leak, so you'd still either want to directly assign to the ivar there or balance out the +1 with a CFRelease.
John.
_______________________________________________
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