Розгортаючи відповідь, яку дав @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 додав у правильному звільненні старого значення та збереженні нового значення.
[Мабуть, над складною відповіддю, але я вважав, що це корисно показати, як можна в майбутньому відповісти на таке питання, пов'язане з АРК]