Memperluas jawaban yang diberikan oleh @Pascal Saya hanya ingin menambahkan bahwa itu pasti hal yang benar untuk dilakukan dan Anda dapat memeriksa dengan melihat apa yang dikompilasi kode. Saya menulis posting blog tentang bagaimana cara memeriksa, tetapi pada dasarnya kode itu dikompilasi ke (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}
Perhatikan panggilan _objc_storeStrong
yang menurut LLVM melakukan ini:
id objc_storeStrong(id *object, id value) {
value = [value retain];
id oldValue = *object;
*object = value;
[oldValue release];
return value;
}
Jadi, untuk menjawab pertanyaan Anda, ya itu benar. ARC telah menambahkan dalam rilis yang benar dari nilai lama dan mempertahankan nilai baru.
[Mungkin jawaban yang terlalu rumit, tetapi menurut saya berguna untuk menunjukkan bagaimana Anda bisa menjawab pertanyaan terkait ARC semacam ini untuk diri Anda sendiri di masa mendatang]