@interface Article : NSObject
@property (nonatomic, strong) NSString *imageURLString;
@end
@implementation Class
@synthesize imageURLString = _imageURLString;
- (void)setImageURLString:(NSString *)imageURLString {
_imageURLString = imageURLString;
//do something else
}
Czy poprawnie nadpisałem setter, gdy ARC jest włączone?
iphone
ipad
ios5
automatic-ref-counting
rowwingman
źródło
źródło
Odpowiedzi:
Tak, to jest poprawne. Trochę też zajęło mi zaufanie, że to rzeczywiście słuszna decyzja.
Czy zdajesz sobie sprawę, że w tym przypadku nadpisanie nie jest konieczne, ponieważ nie robisz więcej niż zrobiłby to standard ustawiający? Tylko jeśli dodasz więcej kodu do
setImageURLString:
, będziesz musiał zastąpić ustawiający.źródło
Rozszerzając odpowiedź udzieloną przez @Pascal, chciałbym tylko dodać, że jest to zdecydowanie słuszne rozwiązanie i możesz sprawdzić, do czego kompiluje się kod. Napisałem post na blogu o tym, jak przejść do sprawdzania, ale w zasadzie ten kod kompiluje się do (ARMv7):
Zwróć uwagę na wywołanie,
_objc_storeStrong
które zgodnie z LLVM robi to:Więc odpowiadając na twoje pytanie, tak, zgadza się. ARC dodał w poprawnym wydaniu starej wartości i zachował nową wartość.
[Prawdopodobnie zbyt skomplikowana odpowiedź, ale pomyślałem, że warto było pokazać, jak możesz odpowiedzieć sobie na tego rodzaju pytania związane z ARC w przyszłości]
źródło
_lineColor = [input copy];
, tak.Połączenie
Otóż to
źródło