При работе с представлениями и контроллерами представления в приложении для iPhone, кто-нибудь может объяснить разницу между loadView и viewDidLoad?
Мой личный контекст заключается в том, что я строю все свои представления из кода, я не использую и не буду использовать Interface Builder, если это что-то изменит.
Я обнаружил, что часто, когда я добавляю код инициализации в loadView, я получаю бесконечную трассировку стека, поэтому я обычно делаю все свои дочерние представления в viewDidLoad ... но мне действительно неясно, когда выполняется каждый из них, и что является более подходящим местом для установки кода инициализации. Что было бы идеально, так это простая схема инициализации вызовов.
Спасибо!
источник
-(void) loadView { // Frame for Hypnosis view CGRect frame = [[UIScreen mainScreen] bounds]; // Create a Hipnosis view v = [[HypnosisView alloc] initWithFrame:frame]; self.view = v;
loadView
это методUIViewController
, который фактически загружает представление и присваивает егоview
свойству. Это также местоположение, котороеUIViewController
будет переопределять подкласс , если вы хотите программно настроитьview
свойство.viewDidLoad
это метод, который вызывается после загрузки представления. Это вызывается после вызова loadView. Это место, где вы можете переопределить и вставить код, который выполняет начальную настройку представления после его загрузки.источник
должен использоваться, когда вы загружаете ваше представление из NIB и хотите выполнить любую настройку после запуска
должен использоваться, когда вы хотите создать свое представление программно (без использования Interface Builder)
источник
Просто добавьте несколько примеров кода, чтобы продемонстрировать, что сказал NilObject:
источник
Чтобы предотвратить бесконечный цикл при чтении self.view, вызывайте супер реализацию класса при загрузке представления. Супер реализация выделит вам новый UIView.
источник
[super loadView];
. Это противоречило в примерах, но я думаю, что документы сказали это правильно (со временем я обнаружил многочисленные ошибки в примерах).[super loadView]
требуется для UITableViewController и т. д. Тем не мение! Любая установка после загрузки (например, добавление дополнительных подпредставлений) должна быть сделана в viewDidLoad.Самый простой способ использовать loadView - это создать некоторый тип контроллера базового представления, например MyBaseViewController, который является подклассом UIViewController. В его методе loadView создайте представление следующим образом:
И когда вам нужно сделать какой-то контроллер представления, вы просто используете подкласс MyBaseViewController, а в его контроллере loadView вы просто вызываете [super loadView], как это
источник
loadView()
вызывается, когда ваш контроллер попросили создать егоself.view
. Вы можете сделать это самостоятельно, какИли родительский класс UIController вашего контроллера уже имеет имя метода,
-loadView()
которое инициализирует ваш self.view в пустое представление. Тогда вы можете позвонитьЯ действительно рекомендую второй подход, поскольку он поощряет наследование. Только если ваш контроллер представления не наследуется напрямую от UIViewController.
источник
В определении, данном Apple для viewDidLoad, упоминается, что он вызывается после загрузки представления контроллера в память. Проще говоря, это первый метод, который будет загружаться.
Вы можете подумать, при каких условиях этот метод будет полностью использован? Ответ в основном то, что вы хотели, чтобы приложение загружалось первым. Например, вам может потребоваться другой цвет фона, вместо белого, вы можете выбрать синий.
источник