31 votes

Méthode recommandée pour déclarer des propriétés de délégué avec ARC

J'avais l'habitude de déclarer toutes les propriétés de délégué comme

 @property (assign) id<FooDelegate> delegate;
 

J'avais l'impression que toutes les propriétés assignées devraient maintenant être des pointeurs faibles, est-ce correct? Si j'essaye de déclarer comme:

 @property (weak) id<FooDelegate> delegate;
 

J'obtiens une erreur en essayant de @synthesize (les propriétés faibles générées automatiquement ne sont pas prises en charge).

Quelle est la meilleure pratique dans ce cas?

23voto

djromero Points 11713

Refactor Xcode 4> Convertir en transformations ARC Objective-C :

 @interface XYZ : NSObject
{
    id delegate;
}
@property (assign) id delegate;
...
@synthesize delegate;
 

dans:

 @interface XYZ : NSObject
{
    id __unsafe_unretained delegate;
}
@property (unsafe_unretained) id delegate;
...
@synthesize delegate;
 

Si je me souviens bien, il est également mentionné dans la vidéo de la WWDC 2011 sur ARC.

22voto

Jano Points 37593

Utilisez __unsafe_unretained place weak pour les projets ARC ciblant iOS 4 et 5. La seule différence est que weak nil le pointeur lorsqu'il est désalloué, et il est uniquement pris en charge dans iOS 5 .

Votre autre question trouve sa réponse dans Pourquoi les délégués Objective-C reçoivent-ils généralement la propriété assignée au lieu de la conserver? .

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