On Fri, 11 Jan 2013 10:03:33 -0800, John McCall <rjmcc...@apple.com> said:
>On Jan 10, 2013, at 4:35 PM, Dave <d...@looktowindward.com> 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.

I would just add: test your ivar for NULL before CFReleasing it. CFReleasing 
NULL will crash your code. Been there done that!

Example of a setter (hmm, maybe I should be testing first to make sure that 
_bitmapContext and bitmap aren't the same object):

if (self->_bitmapContext)
     CGContextRelease(self->_bitmapContext);
self->_bitmapContext = bitmap;

Example of dealloc:

- (void) dealloc {
    if (_bitmapContext)
        CGContextRelease(_bitmapContext);
}

m.

--
matt neuburg, phd = m...@tidbits.com, <http://www.apeth.net/matt/>
A fool + a tool + an autorelease pool = cool!
Programming iOS 5! http://shop.oreilly.com/product/0636920023562.do
_______________________________________________

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