Espandendo la risposta data da @Pascal, vorrei solo aggiungere che è sicuramente la cosa giusta da fare e puoi controllare vedendo a cosa si compila il codice. Ho scritto un post sul blog su come procedere al controllo, ma fondamentalmente quel codice si compila fino a (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}
Nota la chiamata a _objc_storeStrong
cui secondo LLVM fa questo:
id objc_storeStrong(id *object, id value) {
value = [value retain];
id oldValue = *object;
*object = value;
[oldValue release];
return value;
}
Quindi, per rispondere alla tua domanda, sì, è vero. ARC ha aggiunto nel corretto rilascio del vecchio valore e mantenere il nuovo valore.
[Probabilmente una risposta troppo complicata, ma ho pensato che fosse utile mostrare come puoi rispondere a questo tipo di domanda relativa ad ARC per te stesso in futuro]