Когда я программирую без пера, у меня создается впечатление, что мне нужно вызвать loadView для инициализации моего представления, например:
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nil bundle:nil];
if (self) {
// Custom initialization
[self loadView];
}
return self;
}
(Я установил nibNameOrNil = nil, поскольку пера нет)
Затем я настроил представление, например:
- (void) loadView {
self.view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 367)];
[self viewDidLoad];
}
Это все остальное в viewDidLoad.
Я все еще не уверен, должен ли я выполнять вызовы loadView и viewDidLoad таким образом. Им не звонят автоматически.
Что сбивает с толку, так это в документации по ссылке на класс UIViewController:
loadView Discussion
Вы никогда не должны вызывать этот метод напрямую. Контроллер представления вызывает этот метод, когда свойство представления запрошено, но в настоящее время равно нулю. Если вы создаете свои представления вручную, вы должны переопределить этот метод и используйте его для создания ваших представлений. Если вы используете Interface Builder для создания ваши представления и инициализируйте контроллер представления, то есть вы инициализируете представление с использованием метода initWithNibName: bundle: установите nibName и nibBundle напрямую или создайте как свои представления, так и представление контроллер в Интерфейсном Разработчике - тогда вы не должны отменять это метод.
Итак, я не понимаю, как вызывается loadView, если я никогда не должен вызывать его напрямую.
Реализация этого метода по умолчанию ищет действительное перо информацию и использует эту информацию для загрузки связанного файла пера. Если информация о наконечнике не указана, реализация по умолчанию создает простой объект UIView и делает его основным представлением.
Я не понимаю, как это работает - создание боли UIView.
Если вы переопределите этот метод, чтобы создавать представления вручную, вы должны сделать это и назначить корневое представление вашей иерархии просмотреть недвижимость. (Создаваемые вами представления должны быть уникальными экземплярами и не должны использоваться совместно с другими объектами контроллера представления.) Ваш кастомная реализация этого метода не должна вызывать super.
Если вы хотите выполнить дополнительную инициализацию ваших представлений, выполните так что в методе viewDidLoad. В iOS 3.0 и новее вам также следует переопределить метод viewDidUnload, чтобы освободить любые ссылки на просмотр или его содержимое.
Хорошо, пока не сказано, как вызывается viewDidLoad. Итак, для viewDidLoad:
viewDidLoad Discussion
Этот метод вызывается после того, как контроллер представления загрузил свой связанные взгляды в память. Этот метод вызывается независимо от были ли представления сохранены в файле пера или созданы программно в методе loadView. Этот метод чаще всего используется для выполнения дополнительных шагов инициализации для представлений, которые загружается из файлов пера.
Чем вызваны?
Поскольку эти методы не вызываются автоматически в моем коде, мне остается думать, что я должен вызывать их сам. Но я до сих пор не получил четкого понимания из документации, что это правильно.
Ответ Firoze Lafeer правильный, я просто хочу показать, как принудительно загрузить нагрузку для свойства вида правильным образом :
(void)self.view;
] Вы не должны этого делать! Если вы должны, вы делаете что-то не так, но не называйте -loadView
и -viewDidLoad
сами при любых обстоятельствах.