Разделение обязанностей для loadView () и viewDidLoad - PullRequest
0 голосов
/ 30 января 2019

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

РЕДАКТИРОВАТЬ:Первоначальная формулировка этого вопроса была основана на мнении.Чтобы прояснить, меня интересует, существует ли какой-либо справочный материал, указывающий, что существуют технические ограничения в отношении методов, которые нельзя использовать в loadView(), которые можно использовать в viewDidLoad().

1 Ответ

0 голосов
/ 30 января 2019

Документация для loadView в значительной степени отвечает на ваш вопрос:

Если вы используете Interface Builder для создания ваших представлений и инициализации контроллера представлений, вы не должны переопределять этот метод.

Вы можете переопределить этот метод для создания ваших представлений вручную.Если вы решите это сделать, присвойте корневое представление иерархии вашего представления свойству представления.Представления, которые вы создаете, должны быть уникальными экземплярами и не должны использоваться совместно с любым другим объектом контроллера представления.Ваша пользовательская реализация этого метода не должна вызывать super.

Если вы хотите выполнить дополнительную инициализацию ваших представлений, сделайте это в методе viewDidLoad ().

Другими словами, только когда-либо переопределите loadView, если вы пишете свой контроллер представления строго в коде - без пера или раскадровки.И только в том случае, если у вас есть причина, по которой базовое представление контроллера отличается от простого старого UIView, который вы получаете по умолчанию.И помните, что вы должны не вызывать super.loadView() в вашей реализации.

Я бы использовал viewDidLoad для создания и настройки любых подпредставлений, которые вы хотите добавить в базовый вид контроллера представления.(был ли loadView использован или нет).Также используйте viewDidLoad для любой другой настройки, которую нельзя выполнить до тех пор, пока представление не будет загружено.

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

Также имейте в виду, что некоторые начальные настройки контроллера представления принадлежат инициализатору.Но такой код не может ссылаться ни на какие представления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...