Небольшая шпаргалка по жизненному циклу UIViewController - какие методы и в какой последовательности вызываются при разных перемещениях между UIViewController.
Controller A Pushes to Controller B
Порядок исполнения при переходе:
- initWithCoder:
- Когда используется storyboard - вызывается этот метод, а не init или initWithNibName:bundle:
- awakeFromNib
- willMoveToParentViewController:
- prefersStatusBarHidden
- preferredStatusBarUpdateAnimation
- loadView
- loadView назначает все аутлеты (IBOutlets) отвечающим за них @property.
- prepareForSegue:sender:
- viewDidLoad
- Все аутлеты уже подключены, но views ещё не отрисованы
- extendedLayoutIncludesOpaqueBars
- edgesForExtendedLayout
- viewWillAppear:
- extendedLayoutIncludesOpaqueBars
- edgesForExtendedLayout
- updateViewConstraints
- viewWillLayoutSubviews
- viewDidLayoutSubviews
- Animation
- viewDidAppear:
- didMoveToParentViewController:
- updateViewConstraints
- viewWillLayoutSubviews
- viewDidLayoutSubviews
Некоторые из методов вызываются больше 1 раза. Layout вызывается дважды - до и после анимации.
Controller B Pushes to Controller C
При переходе:
- prepareForSegue:sender:
- viewWillDisappear:
- updateViewConstraints
- Animation
- viewDidDisappear:
Controller C Pops to Controller B
При возврате из C в B происходит:
- prefersStatusBarHidden
- preferredStatusBarUpdateAnimation
- extendedLayoutIncludesOpaqueBars
- edgesForExtendedLayout
- viewWillAppear:
- extendedLayoutIncludesOpaqueBars
- edgesForExtendedLayout
- updateViewConstraints
- viewWillLayoutSubviews
- viewDidLayoutSubviews
- Animation
- viewDidAppear:
- updateViewConstraints
- viewWillLayoutSubviews
- viewDidLayoutSubviews
Controller B Pops to Controller A
Уходим совсем из B:
- willMoveToParentViewController:
- Аргумент при этом вызове равен nil, что говорит о том, что сцена B будет убрана из иерархии.
- viewWillDisappear:
- updateViewConstraints
- viewDidDisappear:
- Animation
- didMoveToParentViewController:
- Аргумент тоже nil
- dealloc