Намерение здесь состоит в том, чтобы "сбалансировать" ваше управление подпредставлением. Все, что вы создаете в viewDidLoad
, должно быть выпущено в viewDidUnload
. Это облегчает отслеживание того, что должно быть выпущено где. В большинстве случаев ваш dealloc
метод является зеркальным отражением вашего init
метода, а ваш viewDidUnload
будет зеркальным отображением вашего viewDidLoad
метода.
Как вы указали, методы viewDid
... должны использоваться, когда само представление загружается и выгружается. Это позволяет использовать шаблон, в котором контроллер представления остается загруженным в память, но само представление может быть загружено и выгружено при необходимости:
init
viewDidLoad
viewDidUnload
viewDidLoad
viewDidUnload
...
dealloc
Конечно, выпускать вещи в вашем методе dealloc
также не повредит, если вы установите их в nil
, когда вы отпустите их в viewDidUnload
.
Следующая цитата из раздела «Управление памятью» в документации Apple UIViewController
описывает ее более подробно:
... в iPhone OS 3.0 и более поздних версиях метод viewDidUnload может быть более подходящим местом для большинства потребностей.
Когда появляется предупреждение о нехватке памяти, класс UIViewController очищает свои представления, если он знает, что может перезагрузить или воссоздать их позже. Если это происходит, он также вызывает метод viewDidUnload, чтобы дать вашему коду возможность отказаться от владения любыми объектами, связанными с вашей иерархией представления, включая объекты, загруженные с помощью файла nib, объекты, созданные в вашем методе viewDidLoad, и объекты, созданные на время выполнения и добавлено в иерархию представлений. Как правило, если ваш контроллер представления содержит выходы (свойства или необработанные переменные, содержащие ключевое слово IBOutlet), вы должны использовать метод viewDidUnload, чтобы отказаться от владения этими выходами или любыми другими данными, относящимися к представлению, которые вам больше не нужны.