Правильное использование loadView и viewDidLoad с UIViewController без пера / xibs

Когда я программирую без пера, у меня создается впечатление, что мне нужно вызвать 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. Этот метод чаще всего используется для выполнения дополнительных шагов инициализации для представлений, которые загружается из файлов пера.

Чем вызваны?

Поскольку эти методы не вызываются автоматически в моем коде, мне остается думать, что я должен вызывать их сам. Но я до сих пор не получил четкого понимания из документации, что это правильно.

26
задан Draco 16 January 2012 в 05:48
поделиться

1 ответ

Ответ Firoze Lafeer правильный, я просто хочу показать, как принудительно загрузить нагрузку для свойства вида правильным образом :

(void)self.view;
]

Вы не должны этого делать! Если вы должны, вы делаете что-то не так, но не называйте -loadView и -viewDidLoad сами при любых обстоятельствах.

8
ответ дан 28 November 2019 в 07:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: