@interface Article : NSObject
@property (nonatomic, strong) NSString *imageURLString;
@end
@implementation Class
@synthesize imageURLString = _imageURLString;
- (void)setImageURLString:(NSString *)imageURLString {
_imageURLString = imageURLString;
//do something else
}
Ai-je correctement remplacé le setter lorsque l'ARC est activé?
Réponses:
Oui, c'est correct. Il m'a également fallu un certain temps pour croire que c'est effectivement la bonne chose à faire.
Vous vous rendez compte que dans ce cas, le remplacement n'est pas nécessaire car vous ne faites pas plus que ne le ferait le setter standard généré? Ce n'est que si vous ajoutez plus de code
setImageURLString:
que vous devrez remplacer le setter.la source
En développant la réponse donnée par @Pascal, j'aimerais simplement ajouter que c'est définitivement la bonne chose à faire et que vous pouvez vérifier en voyant ce que le code compile. J'ai écrit un article de blog sur la façon de vérifier, mais fondamentalement, ce code se compile en (ARMv7):
Notez l'appel
_objc_storeStrong
auquel selon LLVM fait ceci:Donc, pour répondre à votre question, oui c'est vrai. ARC a ajouté la version correcte de l'ancienne valeur et la conservation de la nouvelle valeur.
[Probablement une réponse compliquée, mais j'ai pensé qu'il était utile de montrer comment vous pouvez répondre à ce type de question liée à l'ARC à l'avenir]
la source
_lineColor = [input copy];
, oui.Appel
C'est tout
la source