Не лучше лучше вызывать initWithNibName:
косвенно через init.Вы просто хотите позвонить initWithNibName:
в какой-то момент.Вы можете сделать это внешне или внутренне.Некоторые люди думают, что лучше сделать это изнутри.На самом деле у меня есть класс «LayoutUtil», в котором я сохраняю вспомогательные методы, связанные с макетом, чтобы избежать многократного написания утомительного фрагмента кода, связанного с макетом.Вот мой код для загрузки UIViewController:
+ (id)loadController:(Class)classType {
NSString *className = NSStringFromClass(classType);
UIViewController *controller = [[classType alloc] initWithNibName:className bundle:nil];
return controller;
}
И тогда я могу просто сделать:
MyViewController *c = [LayoutUtil loadController:[MyViewController class]];
Если вы хотите, вы можете добавить метод с именем ughhhh к классу и вызватьэто там, это не имеет значения вообще.Дело в том, что не рекомендуется лучше вызывать initWithNibName в методе init, вы просто должны быть уверены, что вызываете его в какой-то момент при запуске UIViewController.
- (id)ughhhh
{
self = [super initWithNibName:@"Myview" bundle:nil];
if (self != nil)
{
}
return self;
}
Файл пера может определеннонужно загружать более одного раза.Каждый раз, когда вы вызываете initWithNibName на UIViewController, XIB должен быть загружен.Многие люди загружают UIViews, которые не принадлежат UIViewController, например:
[[NSBundle mainBundle] loadNibNamed:@"nameOfXIBFile" owner:self options:nil];
Каждый раз, когда вы вызываете эту функцию, вы будете загружать перо.
В некоторых случаях можно кэшировать перо.Примером может служить UITableView, но табличное представление реализует свой собственный кеш.Операционная система не выполняет никакого кэширования автоматически.
init
и initWithNibName:
связаны с тем, что initWithNibName:
автоматически вызывает init для объекта.