2010-03-12 4 views
2

В этом коде я загружающий View Controller (и связанный с ним View) из .xib:При переопределении initWithCoder это всегда необходимо вызвать [супер initWithCoder: кодировщик]

-(id)initWithCoder:(NSCoder *)coder 
    { 
    // add custom initialisation code here 
    [super initWithCoder:coder]; 
    return self; 
    } 

Это успешно работает, но я не понимают, что делает линия [super initWithCoder: coder]. Это инициализация моего View Controller после инициализации моего представления?

Пожалуйста, будьте как можно ясны, когда объясните. Благодарю.

+0

Просто для записи, если вы новичок в этом. (1) НЕКОТОРЫЕ (не всегда), которые вам захотят ** добавить что-то к «настройке» класса ** при его запуске. (2) ** ЕСЛИ ** вам нужно это сделать, ПУТЬ, котор вы делаете оно с кодом точно как вышеуказанное. Обратите внимание, однако, что (3) код выше фактически ничего не делает. На самом деле, очень просто, это не что иное, как ПРИМЕР того, что вы могли бы сделать ** для этого конкретного типа класса, если вам нужно было «добавить код настройки» к рассматриваемому классу. (Фактически, вы бы «добавили свой новый установочный код непосредственно перед строкой 3».) Делает смысл ?! :) – Fattie

ответ

3

Ваш класс является подклассом UIViewController. Вызовите ваш суперкласс (UIViewController), чтобы выполнить шаги, которые он должен выполнить, чтобы вы могли выполнять свои шаги init. Это будет настройка любых свойств, которые UIViewController предоставляет или регистрирует для уведомлений, что UIViewController должен выполнить свою работу.

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

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

+0

Чтобы быть понятным, Interface Builder автоматически подклассифицирует мой класс UIView из UIViewController, когда я добавляю объект UIView в UIViewController.xib? Я вижу, что если я исключаю initWithCoder из моего пользовательского класса UIView, все также загружается нормально, это был полезный совет. – Evan

+0

Экземпляр подкласса UIView будет создан только в том случае, если объект UI View в .xib настроен с именем подкласса в Identity Inspector в IB (в пользовательском классе). – rimsky

+0

@JoeBlow Chill ... – LucasTizma

Смежные вопросы