web-dev-qa-db-fra.com

Objectif C - Setter personnalisé avec arc?

Voici comment j'ai l'habitude d'écrire un setter sur mesure reten avant:

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

   // Other stuff
}

Comment puis-je y parvenir avec ARC lorsque la propriété est définie sur forte. Comment puis-je vous assurer que la variable a un pointeur fort?

34
aryaxt

Le strong prend soin de lui sur le niveau ivar, de sorte que vous pouvez simplement faire

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

et c'est tout.

Remarque: Si vous faites cela sans propriétés automatiques, l'ivar serait

MyObject *_myObject;

et puis Arc prend des soucis des conserves et des versions pour vous (heureusement). __strong est le qualificatif par défaut.

66
Dan Rosenstark

Juste pour résumer la réponse

.h fichier

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

fichier .m

@synthesize myObject = _myObject;

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