Подтвердить что ты не робот

Являются ли viewDidUnload и dealloc всегда вызываемыми при срыве UIViewController?

Я хотел бы знать, всегда ли оба viewDidUnload и dealloc вызываются последовательно в процессе срыва UIViewController. Возможно ли, что dealloc можно вызвать на моем контроллере просмотра без viewDidUnload, который был вызван первым?

В любом случае, если я благополучно освобождаю свойства и сохранял ссылки в обоих методах, это не было бы проблемой, если бы оба метода были вызваны, - но мне было интересно, знал ли кто-нибудь точно или мог пролить свет на срыв процесса.

Обновление 2012:. Следует отметить, что, как если бы iOS 6 viewDidUnload устарел и должен быть заменен ручным просмотром при необходимости в didReceiveMemoryWarning.

Хорошая статья о новом UIView/UIViewContoller и о новом поведении, и она воздействует на блог joe conway

4b9b3361

Ответ 1

viewDidUnload не будет вызываться каждый раз, как метод dealloc. viewDidUnload вызывается только тогда, когда ваше приложение получает предупреждение о низкой памяти!

Подумайте, если вы выпускаете свой объект как в методах viewDidUnload, так и dealloc. Если оба вызываются каждый раз, то вы отпускаете уже выпущенный объект, что приведет к сбою приложения, не так ли?. viewDidUnload - это место, предоставляемое Apple для очистки вещей при получении предупреждения о низкой памяти, потому что вы знаете, что в iPhone у нас есть ограничение памяти.

Ответ 2

Вполне понятно, что метод viewDidiUnload вызывается только при появлении предупреждения о памяти. Хорошей практикой было бы освободить необходимый объект в этом методе, а также сделать объект нулем.