Допустим, я делаю следующее (foo начинается как некоторый объект):
[foo release];
// STUFF with foo
[foo retain];
Пока я не переназначаю foo, в конце этого у меня будет тот же foo, верно? Я не рискую потерять фу во время // ПЕРЕНОСА, не так ли?
Полагаю, я уверен, что мое понимание освобождения правильное. Если я отпущу foo, он на самом деле не исчезнет, пока не исчезнут все его ручки. Другими словами, foo должен был бы быть назначен какому-либо другому объекту в // STUFF, или foo должен был бы выйти из области видимости в // STUFF (и предположительно иметь новый созданный foo) для фактического исходного foo удаляемый объект, верно?
РЕДАКТИРОВАТЬ для мотивации:
Причина, по которой я хочу это сделать, состоит в том, что, скажем, у меня есть следующий оператор switch:
switch (test)
{
case 1:
foo = [A alloc];
[foo inita];
break;
case 2:
foo = [B alloc];
[foo initb];
break;
case 3:
[foo setupc];
break;
case 4:
f = [D alloc];
[foo initd];
break;
}
Имеет смысл освободить foo перед переключателем и сохранить его в конце. За исключением случая 3. Итак, я подумал, что если бы было безопасно делать то, что я предложил, это могло бы упростить код.
Конечно, я могу просто поместить пару релиз / сохранение вокруг каждого alloc / init, но это много повторяющегося кода ...
A [foo autorelease], а затем сохранение может просто сделать трюк.