Arm1.ru

Жизненный цикл UIVIewController

Жизненный цикл UIVIewController

Небольшая шпаргалка по жизненному циклу UIViewController - какие методы и в какой последовательности вызываются при разных перемещениях между UIViewController.

Controller A Pushes to Controller B

Порядок исполнения при переходе:

  1. initWithCoder:
    1. Когда используется storyboard - вызывается этот метод, а не init или initWithNibName:bundle:
  2. awakeFromNib
  3. willMoveToParentViewController:
  4. prefersStatusBarHidden
  5. preferredStatusBarUpdateAnimation
  6. loadView
    1. loadView назначает все аутлеты (IBOutlets) отвечающим за них @property.
  7. prepareForSegue:sender:
  8. viewDidLoad
    1. Все аутлеты уже подключены, но views ещё не отрисованы
  9. extendedLayoutIncludesOpaqueBars
  10. edgesForExtendedLayout
  11. viewWillAppear:
  12. extendedLayoutIncludesOpaqueBars
  13. edgesForExtendedLayout
  14. updateViewConstraints
  15. viewWillLayoutSubviews
  16. viewDidLayoutSubviews
  17. Animation
  18. viewDidAppear:
  19. didMoveToParentViewController:
  20. updateViewConstraints
  21. viewWillLayoutSubviews
  22. viewDidLayoutSubviews

Некоторые из методов вызываются больше 1 раза. Layout вызывается дважды - до и после анимации.

Controller B Pushes to Controller C

При переходе:

  1. prepareForSegue:sender:
  2. viewWillDisappear:
  3. updateViewConstraints
  4. Animation
  5. viewDidDisappear:

Controller C Pops to Controller B

При возврате из C в B происходит:

  1. prefersStatusBarHidden
  2. preferredStatusBarUpdateAnimation
  3. extendedLayoutIncludesOpaqueBars
  4. edgesForExtendedLayout
  5. viewWillAppear:
  6. extendedLayoutIncludesOpaqueBars
  7. edgesForExtendedLayout
  8. updateViewConstraints
  9. viewWillLayoutSubviews
  10. viewDidLayoutSubviews
  11. Animation
  12. viewDidAppear:
  13. updateViewConstraints
  14. viewWillLayoutSubviews
  15. viewDidLayoutSubviews

Controller B Pops to Controller A

Уходим совсем из B:

  1. willMoveToParentViewController:
    1. Аргумент при этом вызове равен nil, что говорит о том, что сцена B будет убрана из иерархии.
  2. viewWillDisappear:
  3. updateViewConstraints
  4. viewDidDisappear:
  5. Animation
  6. didMoveToParentViewController:
    1. Аргумент тоже nil
  7. dealloc

Источник.

keyboard_return back