Erweitern Sie die Antwort von @Pascal. Ich möchte nur hinzufügen, dass dies definitiv das Richtige ist und Sie überprüfen können, bis zu was der Code kompiliert wird. Ich habe einen Blog-Beitrag darüber geschrieben, wie man prüft, aber im Grunde wird dieser Code bis auf (ARMv7) kompiliert:
.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}
Beachten Sie den Aufruf, zu _objc_storeStrong
dem laut LLVM dies geschieht:
id objc_storeStrong(id *object, id value) {
value = [value retain];
id oldValue = *object;
*object = value;
[oldValue release];
return value;
}
Um Ihre Frage zu beantworten: Ja, das ist richtig. ARC hat in der korrekten Freigabe den alten Wert hinzugefügt und den neuen Wert beibehalten.
[Wahrscheinlich überkomplizierte Antwort, aber es war nützlich zu zeigen, wie Sie diese Art von ARC-bezogenen Fragen in Zukunft selbst beantworten können]