UIViewController назначенный инициализатор против метода loadView - PullRequest
1 голос
/ 04 февраля 2012

У меня есть класс контроллеров представления MyVC, выходящий из класса UIViewController.В назначенном инициализаторе я меняю цвет фона на ЗЕЛЕНЫЙ, как указано ниженазначенный инициализатор вызывается перед вызовом loadView.Поэтому я ожидаю, что мой цвет представления (который я установил ЗЕЛЕНЫМ в назначенном инициализаторе) должен стать КРАСНЫМ (что я сделал в loadView).Я вижу свой ЗЕЛЕНЫЙ цвет, и если я комментирую эту ЗЕЛЕНУЮ цветную линию в назначенном инициализаторе, то я вижу КРАСНЫЙ цвет.Так почему же он не переопределяет свойства представления в методе loadView, если он вызывается после инициализатора?

Ответы [ 2 ]

9 голосов
/ 04 февраля 2012

Калеб понял это почти правильно. Когда вы обращаетесь к свойству view контроллера представления, метод доступа view проверяет, загружено ли представление еще. Если нет, он вызывает loadView, затем viewDidLoad, затем возвращает представление.

Эта строка в вашем инициализаторе обращается к свойству view:

    [self.view setBackgroundColor:[UIColor greenColor]];

Итак, чтобы вернуть представление, средство доступа view вызывает ваш метод loadView. Ваш метод loadView устанавливает красный цвет фона представления. Затем ваш инициализатор устанавливает зеленый цвет фона.

Если вы добавите несколько NSLog s в ваш инициализатор и ваш метод loadView, или если вы установите точку останова в вашем методе loadView, вы увидите, что loadView вызывается из view, что звонили с initWithNibName:bundle:.

3 голосов
/ 04 февраля 2012

Цель -loadView - загрузить представление. Он вызывается, когда вы обращаетесь к свойству view контроллера представления, и значение этого свойства равно nil. В этом случае вы обращаетесь к self.view в вашем инициализаторе, поэтому именно тогда вызывается -loadView. Вы устанавливаете фон представления после того, как это произойдет, поэтому представление заканчивается зеленым фоном.

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