Переопределить задатчик с дугой
@interface Article : NSObject
@property (nonatomic, strong) NSString *imageURLString;
@end
@implementation Class
@synthesize imageURLString = _imageURLString;
- (void)setImageURLString:(NSString *)imageURLString {
_imageURLString = imageURLString;
//do something else
}
правильно ли я переопределил сеттер, когда ARC включен?
3 ответа:
Да, это правильно. Также взял меня некоторое время, чтобы поверить, что это действительно правильно.
вы понимаете, что в этом случае переопределение не требуется, поскольку вы не делаете больше, чем стандартный сгенерированный сеттер? Только если вы добавите больше кода в
setImageURLString:
вам нужно будет переопределить сеттер.
расширяя ответ, данный @Pascal, я просто хотел бы добавить, что это определенно правильная вещь, и вы можете проверить, увидев, к чему сводится код. Я написал блоге о том, как идти о проверке, но в основном этот код компилируется до (ARMv7):
.align 2 .code 16 .thumb_func "-[Article setImageURLString:]" "-[Article setImageURLString:]": push {r7, lr} movw r1, :lower16:(_OBJC_IVAR_$_Article._imageURLString-(LPC7_0+4)) mov r7, sp movt r1, :upper16:(_OBJC_IVAR_$_Article._imageURLString-(LPC7_0+4)) LPC7_0: add r1, pc ldr r1, [r1] add r0, r1 mov r1, r2 blx _objc_storeStrong pop {r7, pc}
обратите внимание на вызов
_objc_storeStrong
, который согласно LLVM это:id objc_storeStrong(id *object, id value) { value = [value retain]; id oldValue = *object; *object = value; [oldValue release]; return value; }
Итак, чтобы ответить на ваш вопрос, Да, это верно. Дуга добавила в поле правильное освобождение старого значения и сохранение нового значения.
[вероятно, над сложным ответом, но подумал, что было бы полезно показать, как вы можете ответить на этот вопрос, связанный с дугой, для себя в будущем]