Да, ваше понимание неверно.
Во-первых, не имеет значения, что происходит при выходе из приложения, потому что ОС все равно освободит всю память, выделенную вашему приложению. Не вызывать Deloloc при завершении работы приложения - это просто способ Apple ускорить процесс.
Во-вторых, не * view controller выгружается при вызове viewDidUnload
, а только его view . Контроллер представления остается в живых, пока он не будет освобожден.
В viewDidUnload
вы должны освободить те объекты, которые являются частью представления, и все, что может и будет воссоздано в viewDidLoad
(потому что viewDidLoad
будет вызываться снова, когда контроллеру представления необходимо воссоздать его представление ). Это включает в себя все ваши выходы. Вы также должны установить эти переменные на nil
, чтобы избежать их перевыпуска.
Поскольку в dealloc
вы должны освободить все объекты, которые сохраняет ваш контроллер представления, включая те, которые вы включили в viewDidUnload
.
Взгляните на пример кода Apple, чтобы узнать, как Apple это делает.