viewDidLoad и viewWillAppear использует - PullRequest
0 голосов
/ 09 декабря 2018

Насколько я понимаю, viewDidLoad() вызывается, когда представление создается и используется для вещей, которые должны произойти один раз, тогда как viewWillAppear() используется для задач, которые требуют повторения каждый раз, когда на экране появляется VC.

В чем разница в задачах, выполняющих их один раз и повторяющих каждый раз, когда на экране появляется VC?

В настоящее время у меня есть View с кучей UILabels и UITextFields.Технически, мне нужно только создать и установить текст только один раз, но каждый раз, когда вы посещаете этот View, это нужно будет сделать.Будет ли эта логика более логичной в viewWillAppear() по сравнению с viewDidLoad().

Мой аргумент в пользу того, чтобы поместить их в viewDidLoad(), заключался в том, что они должны произойти только один раз.Опять же, вы можете утверждать, что каждый раз, когда вы находитесь на этом конкретном View, это должно происходить каждый раз.Не уверен, что мое понимание верно или нет ... или я переосмысливаю

Ответы [ 3 ]

0 голосов
/ 09 декабря 2018

Довольно сложно ответить на ваш вопрос, не имея больше информации о том, чего именно вы хотите достичь, но может быть полезно иметь в виду следующую диаграмму о жизненном цикле контроллера представления:

View Controller Life Cycle

Если вы поместите UILabel или UITextField в представление в viewDidLoad, они будут оставаться там каждый раз, когда вызывается viewWillAppear (), и, таким образом, вам не нужно создавать экземпляры этих метокили снова поля в viewWillAppear ().

0 голосов
/ 09 декабря 2018

Вот как их можно использовать в простом игровом процессе:

  • создать экземпляр UILabel (например, счет игры) в ViewDidLoad главного меню UIView

  • загрузить главное меню

  • представить игровую сцену, сыграть в игру и т. Д. ...

  • получитьновый рекорд, главное меню ViewDidAppear обновляет UILabel с новым счетом, и когда игровая сцена закрывается, UILabel будет отображать новый счет.

0 голосов
/ 09 декабря 2018

Вы пропускаете точку, когда всякий раз, когда вы создаете новый экземпляр vc, он viewDidLoad вызывается один раз, это означает, что если вы отклоните этот vc или вытолкнете его (если он находится внутри контроллера навигации), то он полностью освободится (еслинет сильных ссылок), это история с 1 экземпляром, если вы представили другой экземпляр, он пойдет так же, но

Для lifeTime 1 экземпляра viewDidLoad вызывается один раз, а viewWillAppear /viewDidAppear вызываются всякий раз, когда вы отклоняете виртуальный канал, представленный этим экземпляром, или извлекаете этот дочерний элемент из стека

Вставьте код установки в viewDidLoad, а любой контент, который вы хотите обновить, установите его в viewWillAppear / viewDidAppear Например, предположим, у вас есть таблица, в которой перечислены некоторые элементы, и вы добавляете элемент в модальный vc, затем вы помещаете tableView.reloadData() в viewWillAppear, но для добавления tableView к представлению вы делаете это внутриviewDidLoad

...