UIViewController — это фундаментальный класс в структуре UIKit. Одной из наиболее важных задач, которую он выполняет, является управление жизненным циклом своего представления. В данной статье рассмотрим следующие вопросы:
- Что такое UIViewController методы жизненного цикла?
- Когда и для чего используется каждый из них?

в этом()

Самый первый метод, вызываемый в жизненном цикле UIViewController, — это init(). Этот метод предназначен для подготовки экземпляра класса к использованию.
На самом деле в классе UIViewController есть два инициализатора.

  • init()
  • init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?)

Бывший инициализатор в конечном итоге должен будет вызвать более поздний. Итак, позвольте мне объяснить, что он делает.

Этот метод выполняет простую логику. Он ищет файл .xib (.nib). В случае, когда он находит файл .xib, он связывает с ним контроллер, иначе просто не делает.

Следует помнить, что на данном этапе жизненного цикла еще не создано ни представление, ни выходы. Так что это означает, что контроллер может счастливо жить без представления, пока не будет вызова представления.

Например, UITabBarViewController содержит ссылки на определенное количество UIViewControllers. Однако представление контроллера, которое в данный момент не отображается на экране, будет создано только тогда, когда пользователь переключится на эту вкладку и будет сделан вызов представления.

loadView()

Этот метод прост. Он загружает либо представление из связанного .xib файла, либо просто пустое.
Однако именно здесь вы можете предоставить свое собственное представление. Для этого вам нужно переопределить этот метод и назначить свойству представления свое уникальное представление, которое не будет совместно использоваться в вашем приложении с другими контроллерами.

loadViewIfNeeded()

Этот метод вызывается для загрузки представления контроллера представления, если оно еще не установлено.

просмотрDidLoad()

Этот метод вызывается после того, как контроллер представления загрузил свое представление в память. Это отличная возможность выполнить дополнительную работу над компонентами пользовательского интерфейса. Однако в этот момент размер представления может быть не таким, каким он был бы после его отображения на экране. Вот почему не рекомендуется писать какую-либо логику расчета, которая использует ширину или высоту любого представления.

viewWillAppear(_ анимированный: Bool)

Метод вызывается непосредственно перед тем, как представление будет представлено на экране. Если для представления контроллера используется анимация, этот метод будет вызываться перед анимацией.

видWillLayoutSubviews()

Этот метод вызывается, когда представление контроллера собирается разместить свои подпредставления. Как Apple говорит в документации, реализация этого метода по умолчанию ничего не делает. Но вы можете переопределить этот метод, чтобы внести необходимые изменения.

viewDidLayoutSubviews()

Этот метод уведомляет контроллер о том, что его представление только что выложило все свои подпредставления. Как и в предыдущем методе, его реализация по умолчанию ничего не делает, но вы можете переопределить его, чтобы внести определенные изменения.

viewDidAppear(_ анимированный: Bool)

Этот метод вызывается сразу после того, как вид контроллера был показан на экране. Если анимация использовалась для представления контроллера представления, этот метод будет вызываться после анимации.

viewWillDisappear (_ анимированный: Bool)

Этот метод уведомляет контроллер о том, что его представление будет удалено из иерархии представлений. Если для удаления контроллера используется анимация, этот метод будет вызываться перед анимацией. Обычно он используется для отмены изменений, сделанных в методе viewDidAppear. Например, в методе viewDidAppear вы можете изменить стиль строки состояния в соответствии с потребностями конкретного экрана и отменить изменения в методе viewWillDisappear непосредственно перед удалением представления из иерархии представлений.

viewDidDisappear(_ анимированный: Bool)

Этот метод вызывается после того, как представление контроллера было удалено из иерархии представлений. Вы можете переопределить этот метод, чтобы выполнить дополнительную работу, связанную с удалением представления.

сделалReceiveMemoryWarning()

Обычно я не вижу людей, добавляющих этот метод в жизненный цикл UIViewController’s. Однако я считаю, что это часть его.
Этот метод вызывается, когда приложение получает предупреждение о нехватке памяти. И получает его, когда система определяет, что объем доступной памяти очень мал.
Вы можете переопределить этот метод, чтобы освободить часть памяти, используемой вашим контроллером, или сохранить некоторые световые данные, например текст из UITextField, и извлечь их позже, когда пользователь откроет приложение.

деинит

Поскольку UIViewController является классом, он имеет метод deinit и вызывает его, когда экземпляр контроллера представления был освобожден. Обычно этот метод используется для удаления каких-либо наблюдателей, например, из NotificationCenter.

Краткое содержание

Эти методы являются частью жизненного цикла UIViewController. Очень важно понимать эту тему и каждый из этих методов. Прежде всего потому, что этот вопрос задают почти в каждом iOS-интервью. Во-вторых, это поможет вам создавать более качественные приложения.

Спасибо за прочтение!

если вам понравилась эта статья, не забудьте хлопнуть в ладоши, чтобы другим было легче ее найти.