Конечно, viewDidLoad
был вызван. Это произошло мгновенно, как только вы обратились к view
ViewController2 в своем коде.
Но, допустим, ваш ViewController2 выполняет и другие функции, помимо загрузки представления. Предположим, что его представление содержит кнопку, которая через действие привязана к функции в ViewController2. Если вы сейчас нажмете эту кнопку, ничего не произойдет.
Это потому, что сам ViewController2 мертв: он исчез в клубе дыма.
Это можно увидеть, реализовав deinit
в ViewController2. Вы увидите, что, как называется viewDidLoad
, так и deinit
. Вы остаетесь с представлением контроллера представления, у которого нет контроллера представления. Это плохо.
Существует контроллер представления иерархия , который отвечает за поддержание отношений между контроллерами представления. Когда вы добавляете ViewController2 как дочерний контроллер представления ViewController1, вы поддерживаете эту иерархию и поддерживаете ее правильно в соответствии с правилами, которые говорят:
Если представление VC2 находится где-то внутри представления VC1, то VC2 должен быть дочерним (на некоторой глубине) VC1.
Другими словами, иерархия представления и иерархия контроллера представления должны работать вместе. В противном случае цепочка респондента будет разорвана, и жизнь станет хаосом.
(Существуют и другие требования, когда вы делаете один контроллер представления дочерним для другого, например отправка didMoveToParent
дочернему элементу как часть открывающий танец, а также другие обязанности по пересылке сообщений, чтобы гарантировать, что дочерний контроллер представления получит другие сообщения, такие как viewDidAppear
, в нужное время. Это сложный бизнес. Однако я сосредоточил свой ответ на самом основном c часть того, что вы спросили.)
Я должен добавить: если ваша цель состояла в том, чтобы просто извлечь представление из кончика и вставить его в ваше собственное представление, вы Конечно, можно сделать это, нет проблем. То, что вы не должны делать, это использовать контроллер вида как своего рода ма gnet или пылесос, чтобы получить представление для вас, если вы намерены разрешить go самого контроллера представления.