En développant la réponse donnée par @Pascal, je voudrais juste ajouter que c'est certainement 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 procéder à la vérification, mais en gros, 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
qui 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 exact. ARC a ajouté la libération correcte de l'ancienne valeur et la conservation de la nouvelle valeur.
[Réponse probablement trop compliquée, mais j'ai pensé qu'il était utile de montrer comment vous pouvez répondre à ce genre de questions liées à l'ARC pour vous-même à l'avenir].