En développant la réponse donnée par @Pascal, j'aimerais simplement ajouter que c'est définitivement la bonne chose à faire et que vous pouvez vérifier en voyant ce que le code compile. J'ai écrit un article de blog sur la façon de vérifier, mais fondamentalement, ce code se compile en (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}
Notez l'appel _objc_storeStrong
auquel selon LLVM fait ceci:
id objc_storeStrong(id *object, id value) {
value = [value retain];
id oldValue = *object;
*object = value;
[oldValue release];
return value;
}
Donc, pour répondre à votre question, oui c'est vrai. ARC a ajouté la version correcte de l'ancienne valeur et la conservation de la nouvelle valeur.
[Probablement une réponse compliquée, mais j'ai pensé qu'il était utile de montrer comment vous pouvez répondre à ce type de question liée à l'ARC à l'avenir]