Зачем нам нужны (void)viewDidUnload и (void)dealloc {

Когда представление выгружается и еще не освобождается?

Почему в viewDidUnload мы делаем

self.member = ноль;

и в Deloloc мы делаем

[релиз участника]

Они делают почти то же самое, но почему мы делаем одно в viewDidUnload, а другое в dealloc?

3 ответа

Решение

viewDidUnload вызывается, когда ваше приложение получает предупреждение о памяти. Вы должны освободить все сохраненные представления, которые могут быть восстановлены в loadView или viewDidLoad.

Я не думаю, что вы должны делать это, так как участник будет nil когда вы отправляете release сообщение в вашем dealloc метод, поэтому оригинал member будет течь.

viewDidUnload вызывается, когда представление выгружается (отсюда и название) и используется для выгрузки практически всего, что вы загружаете с помощью loadView oder viewDidLoad, чтобы освободить память, когда ресурсы памяти ограничены. Система дает вам возможность высвободить ресурсы, которые впоследствии могут быть снова загружены с помощью viewDidLoad / loadView. Обычно вы освобождаете все визуальные компоненты или иерархии, созданные вами в viewDidLoad или через NIB. Но вы бы сохранили свои данные и освободили только те ресурсы, которые не могут быть автоматически загружены (viewidLoad, loadView или любой из ваших собственных механизмов кэширования). В dealloc вы освобождаете все, что хранится в вашем классе

Другие вопросы по тегам