Objective C - Custom setter with ARC?

2019-01-17 19:44发布

问题:

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?

回答1:

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.



回答2:

Just to sum up the answer

.h file

//If you are doing this without the ivar
@property (nonatomic, strong) MyObject *myObject;

.m file

@synthesize myObject = _myObject;

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