Mở rộng câu trả lời được đưa ra bởi @Pascal Tôi chỉ muốn nói thêm rằng đó chắc chắn là điều đúng đắn cần làm và bạn có thể kiểm tra bằng cách xem mã biên dịch thành gì. Tôi đã viết một bài đăng trên blog về cách kiểm tra, nhưng về cơ bản mã đó biên dịch thành (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}
Lưu ý lời gọi _objc_storeStrong
mà theo LLVM thực hiện điều này:
id objc_storeStrong(id *object, id value) {
value = [value retain];
id oldValue = *object;
*object = value;
[oldValue release];
return value;
}
Vì vậy, để trả lời câu hỏi của bạn, vâng, đúng vậy. ARC đã thêm vào việc phát hành đúng giá trị cũ và giữ lại giá trị mới.
[Có thể là câu trả lời phức tạp, nhưng tôi nghĩ sẽ hữu ích khi chỉ ra cách bạn có thể trả lời loại câu hỏi liên quan đến ARC này cho chính mình trong tương lai]