iPhone: должен ли initWithNibName: bundle: метод быть удален из класса UIViewController, если он не используется? - PullRequest
0 голосов
/ 04 апреля 2010

Я заметил, что этот метод предоставляется в файлах UIViewController .m, но закомментирован:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

Я оставлял этот метод закомментированным или даже удалял его. Но потом я посмотрел на эту строку внутри метода:

if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])

Я предполагаю, что если бы для self было действительно важно установить значение super, то Apple не покомментировал бы метод по умолчанию. С другой стороны, если мне нужно выполнить некоторые настройки в этом методе, зачем мне устанавливать self = super? Какая лучшая практика и почему?

1 Ответ

2 голосов
/ 04 апреля 2010

То, что вы видите с вызовами [super ...], является вложенной инициализацией, где производный класс сначала вызывает свой родительский класс для инициализации, прежде чем продолжить.Это общий шаблон в Какао, а также в некоторых других языках.

Так что этот метод initWithNibName:bundle: будет вызываться, если вы инициализируете контроллер представления с соответствующим nib (xib).Если вашему производному контроллеру представления не нужно делать какой-то особый шаг во время инициализации, вам на самом деле не нужно определять этот метод для переопределения реализации класса родителя - будет использоваться существующая реализация в UIViewController.Код инициализации обычно лучше использовать в viewDidLoad, если вы можете им управлять.

Так как это закомментированный код, вы можете удалить его, не беспокоясь об этом.

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