web-dev-qa-db-fra.com

Manière recommandée de déclarer des propriétés déléguées avec arc

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

@property (assign) id<FooDelegate> delegate;

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

@property (weak) id<FooDelegate> delegate;

Je reçois une erreur lors de la tentative de @Synthesize (les propriétés faibles autogénérées ne sont pas prises en charge).

Quelle est la meilleure pratique dans ce cas?

31
cfischer

Utilisation __unsafe_unretained Au lieu de cela, weak pour des projets d'arc ciblant iOS 4 et 5. La seule différence est que weak nils le pointeur lorsqu'il n'est pas suffisamment pris en charge dans IOS 5.

Votre autre question est répondue pourquoi les délégués de l'objectif-C sont-ils généralement accordés à la propriété au lieu de conserver? .

22
Jano

Xcode 4 refactor> Convertir à l'objectif-C Arc Transforms:

@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 l'ARC.

23
djromero