Mở rộng câu trả lời được đưa ra bởi @Pascal Tôi chỉ muốn thêm rằng đó chắc chắn là điều đúng để làm và bạn có thể kiểm tra bằng cách xem những gì mã biên dịch xuống. Tôi đã viết một blog post về làm thế nào để đi về kiểm tra, nhưng về cơ bản mã mà biên dịch xuống (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 ý các cuộc gọi đến _objc_storeStrong
mà according to 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, đúng vậy. ARC đã thêm vào bản phát hành chính xác của giá trị cũ và giữ lại giá trị mới.
[Có lẽ qua câu trả lời phức tạp, nhưng nghĩ rằng nó là hữu ích để hiển thị như thế nào bạn có thể đi về trả lời này sắp xếp của ARC câu hỏi liên quan cho bản thân trong tương lai]
Có, điều này có vẻ đúng với tôi. Nó hoạt động như thế nào bạn mong đợi hay không? –