Расширяя ответ, данный @Pascal, я просто хотел бы добавить, что это определенно правильное решение, и вы можете проверить, посмотрев, до чего компилируется код. Я написал сообщение в блоге о том, как проводить проверку, но в основном этот код компилируется до (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}
Обратите внимание на вызов, _objc_storeStrong
который, согласно LLVM, делает следующее:
id objc_storeStrong(id *object, id value) {
value = [value retain];
id oldValue = *object;
*object = value;
[oldValue release];
return value;
}
Итак, отвечая на ваш вопрос, да, правильно. ARC добавила правильную версию старого значения и сохранила новое значение.
[Наверное, слишком сложный ответ, но подумал, что было бы полезно показать, как вы можете в будущем ответить себе на подобные вопросы, связанные с ARC]