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?
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? .
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.