Метод ViewDidLoad() вызывается каждый раз в xCode 9.4 и iOS 11.

Всякий раз, когда мы present или push от SourceViewController до DestinationViewController, метод ViewDidLoad() вызывался каждый раз в DestinationViewController в xCode 9.4 и iOS 11 или позже. И когда мы выталкиваем или убираем из DestinationViewController в SourceViewController, метод viewDidLoad() не вызывается.


person Divya Patel    schedule 18.08.2018    source источник
comment
См. viewDidLoad, вызываемый только один раз при создании объекта VC. Каждый раз, когда вы создаете новый объект VC, он вызывается.   -  person vivekDas    schedule 18.08.2018
comment
viewDidLoad не должен вызываться при извлечении или отклонении, поэтому поведение правильное.   -  person JohnV    schedule 18.08.2018
comment
@vivekDas, отладьте и проверьте вызов ViewDidLoad() без создания какого-либо объекта. Если проект будет большим и метод будет вызываться каждый раз, тогда мы получим проблемы с памятью и загрузкой. Поэтому я хочу разобраться в этом вопросе.   -  person Divya Patel    schedule 18.08.2018
comment
Невозможно, чтобы ViewDidLoad вызывался без создания и отображения VC. Вы что-то не так проверяете. Проверьте статью ниже. roadfiresoftware.com/2015/01/   -  person vivekDas    schedule 18.08.2018
comment
@vivekDas viewDidLoad не должен вызываться каждый раз, когда присутствует или нажимается, это должно происходить в первый раз, но не каждый раз. в моем случае его вызывают каждый раз. в xCode 8 и iOS 10 он не вызывался каждый раз, но теперь в xCode 9.4 и iOS 11 он вызывается каждый раз.   -  person Divya Patel    schedule 18.08.2018
comment
разместите свой код, возможно, вы создаете новый экземпляр.   -  person Dhiru    schedule 18.08.2018
comment
@DivyaPatel: см. обновленный ответ.   -  person Dhiru    schedule 18.08.2018
comment
Добавьте свой код, как вы представляете свой VC.   -  person vivekDas    schedule 18.08.2018


Ответы (2)


Метод ViewDidload вызывается только при первой загрузке представления. Когда вы представляете или нажимаете, он загружает представление, поэтому он вызывает viewdidload. Но когда вы вытащите его, отпустите представление.

person shivi_shub    schedule 18.08.2018

Вот жизненный цикл UIViewController.

  • ViewDidLoad — вызывается при создании класса и загрузке из xib. (Либо присутствующий, либо принудительный) Этот метод вызывается для первоначальной настройки и вызывается только один раз.
  • ViewWillAppear — вызывается прямо перед тем, как ваше представление появится на экране. Оно будет вызываться каждый раз, когда ваше представление должно появиться на экране.
  • ViewDidAppear — вызывается после появления представления — отличное место для запуска анимации или загрузки внешних данных из API. Это также будет вызываться каждый раз после ViewWillAppear, когда на экране появлялось представление.
  • ViewWillDisappear/DidDisappear — та же идея, что и у ViewWillAppear/ViewDidAppear, только когда представление вот-вот закроется или всплывет.
  • ViewDidUnload/ViewDidDispose — В Swift или Objective C именно здесь вы выполняете очистку и выпуск материала, но это обрабатывается автоматически, поэтому вам не нужно здесь многого делать.

Подробнее читайте в документации Apple.

person Sunil Targe    schedule 18.08.2018