Являются ли viewDidUnload и dealloc всегда вызываемыми при срыве UIViewController?
Я хотел бы знать, всегда ли оба viewDidUnload
и dealloc
вызываются последовательно в процессе срыва UIViewController. Возможно ли, что dealloc
можно вызвать на моем контроллере просмотра без viewDidUnload
, который был вызван первым?
В любом случае, если я благополучно освобождаю свойства и сохранял ссылки в обоих методах, это не было бы проблемой, если бы оба метода были вызваны, - но мне было интересно, знал ли кто-нибудь точно или мог пролить свет на срыв процесса.
Обновление 2012:. Следует отметить, что, как если бы iOS 6 viewDidUnload
устарел и должен быть заменен ручным просмотром при необходимости в didReceiveMemoryWarning
.
Хорошая статья о новом UIView/UIViewContoller и о новом поведении, и она воздействует на блог joe conway
Ответы
Ответ 1
viewDidUnload
не будет вызываться каждый раз, как метод dealloc
. viewDidUnload
вызывается только тогда, когда ваше приложение получает предупреждение о низкой памяти!
Подумайте, если вы выпускаете свой объект как в методах viewDidUnload
, так и dealloc
. Если оба вызываются каждый раз, то вы отпускаете уже выпущенный объект, что приведет к сбою приложения, не так ли?. viewDidUnload
- это место, предоставляемое Apple для очистки вещей при получении предупреждения о низкой памяти, потому что вы знаете, что в iPhone у нас есть ограничение памяти.
Ответ 2
Вполне понятно, что метод viewDidiUnload вызывается только при появлении предупреждения о памяти. Хорошей практикой было бы освободить необходимый объект в этом методе, а также сделать объект нулем.