@interface Article : NSObject
@property (nonatomic, strong) NSString *imageURLString;
@end
@implementation Class
@synthesize imageURLString = _imageURLString;
- (void)setImageURLString:(NSString *)imageURLString {
_imageURLString = imageURLString;
//do something else
}
启用 ARC 时我是否正确覆盖了设置器?
是的,这是正确的。我也花了一段时间才相信这确实是正确的做法。
您确实意识到在这种情况下,不需要覆盖,因为您不会做比标准生成的 setter 做的更多的事情吗?只有向 setImageURLString:
添加更多代码时,您才需要覆盖设置器。
扩展@Pascal 给出的答案,我只想补充一点,这绝对是正确的做法,您可以通过查看代码编译成的内容来检查。我写了一篇关于如何进行检查的 blog post,但基本上该代码编译为 (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}
请注意对 according to LLVM 执行此操作的 _objc_storeStrong
的调用:
id objc_storeStrong(id *object, id value) {
value = [value retain];
id oldValue = *object;
*object = value;
[oldValue release];
return value;
}
所以,回答你的问题,是的,没错。 ARC 已添加正确释放旧值并保留新值。
[可能过于复杂的答案,但认为展示您将来如何为自己回答此类与 ARC 相关的问题很有用]
_lineColor = [input copy];
,是的。
称呼
[super setImageURLString:theString];
而已
不定期副业成功案例分享