Почему мы должны выпустить?

2 ответа

Установка указателя в ноль не освобождает память, занятую предыдущим местом назначения этого указателя. Говоря простым языком, присвоение ему значения nil не не освобождает его.

Если ваше приложение собирает мусор, освобождение не выполняется и может быть исключено. В остальном это очень и очень нужно. Следовательно, способ 1 всегда правильный, а способ 2 - только при сборке мусора.

Примечание : Этот ответ не относится к проектам, использующим автоматический подсчет ссылок. В ARC установка указателя на nil не отправляет релиз объекту.

11
ответ дан 9 December 2019 в 20:45
поделиться

Как сказал BJ, установка значения nil не освободит память, а в среде, не собранной с помощью gc, вызовет утечку памяти. Альтернативой, которая, возможно, также была бы действительной, была бы

MyClass *obj = [[[MyClass alloc] init] autorelease];  

obj = nil;
1
ответ дан 9 December 2019 в 20:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: