Objective C - Custom setter with ARC?

aryaxt picture aryaxt · Apr 6, 2012 · Viewed 19.4k times · Source

Here is how I used to write a custom retained setter before:

- (void)setMyObject:(MyObject *)anObject
{
   [_myObject release], _myObject =  nil;
   _myObject = [anObject retain];

   // Other stuff
}

How can I achieve this with ARC when the property is set to strong. How can I make sure that the variable has strong pointer?

Answer

Dan Rosenstark picture Dan Rosenstark · Apr 6, 2012

The strong takes care of itself on the ivar level, so you can merely do

- (void)setMyObject:(MyObject *)anObject
{
   _myObject = anObject;
   // other stuff
}

and that's it.

Note: if you're doing this without automatic properties, the ivar would be

MyObject *_myObject;

and then ARC takes cares of the retains and releases for you (thankfully). __strong is the qualifier by default.