#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.