34 votes

Objective C - Personnalisateur avec ARC?

Voici comment j’écrivais un setter conservé personnalisé auparavant:

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

   // Other stuff
}
 

Comment puis-je réaliser cela avec ARC lorsque la propriété est définie sur strong. Comment puis-je m'assurer que la variable a un pointeur fort?

66voto

Yar Points 25421

Le strong prend soin de lui-même sur le niveau d'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 alors ARC prend soin des retenues et des libérations pour vous (heureusement). __strong est le qualificatif par défaut.

5voto

Adithya Points 1443

Juste pour résumer la réponse

fichier .h

 //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
}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X