Зачем нам нужны (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 вы освобождаете все, что хранится в вашем классе