viewDidLoad и viewWillAppear использует

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

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

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

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


person halapgos1    schedule 08.12.2018    source источник
comment
Viewdidload вызывается после того, как UIView подготовлен в памяти. Если представление не удалено из памяти, оно не будет вызвано.   -  person E.Coms    schedule 09.12.2018


Ответы (3)


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

Просмотреть жизненный цикл контроллера

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

person RonH    schedule 08.12.2018

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

В течение времени жизни 1 экземпляра viewDidLoad вызывается один раз, а viewWillAppear/viewDidAppear вызывается всякий раз, когда вы отклоняете vc, представленный этим экземпляром, или извлекаете этот дочерний элемент из стека.

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

person Sh_Khan    schedule 08.12.2018

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

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

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

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

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

person jackw11111    schedule 09.12.2018