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