การขยายคำตอบที่ได้รับจาก @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;
}
เพื่อตอบคำถามของคุณใช่ถูกต้อง ARC ได้เพิ่มการปล่อยค่าเก่าที่ถูกต้องและคงไว้ซึ่งค่าใหม่
[อาจจะเป็นคำตอบที่ซับซ้อน แต่คิดว่ามันมีประโยชน์ที่จะแสดงให้เห็นว่าคุณจะตอบคำถามเกี่ยวกับ ARC ประเภทนี้ให้ตัวเองได้อย่างไรในอนาคต]