Ответ 1
Цель состоит в том, чтобы "сбалансировать" ваше управление подвью. Все, что вы создаете в 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, чтобы отказаться от владения этими точками или любыми другими относящимися к просмотру данными, которые вам больше не нужны.