краткий ответ; используйте ARC.
Ответ Джо более или менее правильный. Пока это не так.
В общем случае нет необходимости сохранять аргументы или возвращать значения из других методов. Однако полученный код работает только по совпадению и соглашению, а не по алгоритмическому анализу.
Рассмотрим:
NSString *foo = [aMutableArray objectAtIndex: 5];
[aMutableArray removeObjectAtindex: 5];
[someTextField setTextValue: foo];
БУМ!
Ваш код только что упал. Возможно (не произойдет сбой, если foo
окажется константной строкой или случится , чтобы быть сохраненным чем-то другим, или случится , чтобы быть сохраненным / Авто-релиз где-то еще).
Технически это должно быть:
NSString *foo = [aMutableArray objectAtIndex: 5];
[foo retain];
[aMutableArray removeObjectAtindex: 5];
[someTextField setTextValue: foo];
[foo release];
То есть foo
следует сохранять в тот момент, когда он входит в область действия и освобождается в тот момент, когда он больше не используется в области действия. Или вы можете [[foo retain] autorelease];
, но может возникнуть проблема с автоматическим сбросом давления (обычно это не так, но может быть).
ARC выполняет этот вид анализа и обеспечивает сохранение foo
, как показано выше, когда это необходимо.