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