Почему внутри viewDidUnload есть инструкция release?

#ios #memory-management

#iOS #управление памятью

Вопрос:

 -(void)viewDidUnload{
    [childController release], childController = nil;
}

-(void)dealloc{
    [childController release];
}
  

Я видел вышеупомянутые методы, и мне было любопытно, почему childController выпущен в обоих?

Комментарии:

1. Не забудьте отправить [super dealloc] в конце вашего -dealloc метода.

Ответ №1:

viewDidUnload может вызываться в ситуации предупреждения о нехватке памяти, когда представление не отображается, и в этом случае необходимо освободить любые объекты, которые созданы / сохранены в loadView / viewDidLoad или сохраненных выходах NIB. Эти объекты могут / будут воссозданы, если на представление контроллера представления снова ссылаются / отображаются. Очевидно, что несоблюдение процедуры освобождения объектов в viewDidUnload может привести к утечкам памяти и сбоям.

Как правило, вы также хотите обнулить значение в viewDidUnload, чтобы последующий вызов dealloc после viewDidUnload (без перезагрузки представления) не вызывал сбой при вызове release для мусорного объекта.

Как правило, со свойствами вам просто нужно выполнить self.childController = nil; в viewDidUnload, который обрабатывает как освобождение, так и обнуление объекта.

Комментарии:

1. Спасибо за подробное объяснение. Я предполагаю, что, насколько я понимаю, в viewDidUnload все, что мы сделали, это установили значение stuff равным nil, а в dealloc мы выпустили stuff.