Je suis en train de terminer le puzzle.
__strong
est la valeur par défaut pour tous Objective-C retainable pointeurs d'objet comme NSObject, NSString, etc.. C'est une référence forte. ARC soldes avec un -release
à la fin de la portée.
__unsafe_unretained
est égale à l'ancienne. Il est utilisé pour un faible pointeur sans conserver la retainable objet.
__weak
, c'est comme __unsafe_unretained
sauf que c'est une auto-réinitialisation de référence faible ce qui signifie que le pointeur sera mis à zéro dès que l'objet référencé est libéré. Ceci élimine le danger de pendre les pointeurs et EXC_BAD_ACCESS erreurs.
Mais qu'est - __autoreleasing
? Je vais avoir un moment difficile de trouver des exemples pratiques sur la quand j'ai besoin d'utiliser ce qualificatif. Je crois que c'est uniquement pour les fonctions et les méthodes qui s'attendent à un pointeur de pointeur de tels que:
- (BOOL)save:(NSError**);
ou
NSError *error = nil;
[database save:&error];
qui, en vertu de l'ARC doit être déclaré ainsi:
- (BOOL)save:(NSError* __autoreleasing *);
Mais c'est trop vague et que je voudrais comprendre pleinement pourquoi. Le code des extraits que j'ai trouver de la place de l' __autoreleasing entre les deux stars, qui fait un peu bizarre pour moi. Le type est - NSError**
(un pointeur de pointeur de NSError), donc pourquoi mettre l' __autoreleasing
entre les étoiles et non pas simplement en face d' NSError**
?
Aussi, il pourrait y avoir d'autres situations dans lesquelles je dois compter sur __autoreleasing
.