Подтвердить что ты не робот

Использует ли Interface Builder метод -init для инициализации контроллеров представлений?

У меня есть контроллер панели вкладок с помощью конструктора интерфейсов, и каждый элемент панели вкладок связан с контроллером представления (4 вкладки, 4 диспетчера представлений). Я хочу знать, использует ли интерфейс Builder метод -init для инициализации контроллера вида, потому что, по-видимому, этот метод не вызван:

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

... и я хочу сделать некоторые инициализации. Я не могу добавить это к -viewDidLoad, так как он будет отозван в случае предупреждения о памяти. Любая идея?

4b9b3361

Ответ 1

Объекты, загруженные из *.(nib|xib), помещаются с помощью:

- (id)initWithCoder:(NSCoder *)inCoder;

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

- (void)awakeFromNib;

из протокола NSNibAwaking.

Ответ 2

Я также упомянул initWithCoder vs awakeFromNib.

В общем случае я переопределяю initWithCoder при распределении памяти для объекта или значений уставок. Когда вам нужно выполнить некоторую настройку после подключения IBOutlets, переопределите awakeFromNib. До тех пор переменные экземпляра IBOutlet для других видов и элементов управления не подключены.