2013-08-06 5 views
2

Я недавно изучил некоторые проекты с открытым исходным кодом на основе какао. Я видел, что многие программы имеют все инициализирующий код в awakeFromNib и редко используют назначенный инициализатор. Я привык делать это таким образом:Цель C: init и awakeFromNib

  • в перегруженной обозначенном инициализаторе: делать все без СИБ вещи
  • в awakeFromNib: не все Nib связанные вещи

Является ли этот подход не так?

ответ

1

Да, это правильно, все материалы, связанные с nib, должны выполняться методом awakeFromNib. В тот момент, когда он называется, у вас уже есть инициализированный и загруженный вид из nib, поэтому вы уже можете его настроить и использовать.

Как относился к инициализаторам, пожалуйста, проверьте этот вопрос: iOS: UIView subclass init or initWithFrame:?

Назначенного инициализатором является один, что все остальными Инициализаторы должны позвонить. UIView и подклассы немного необычны в том, что у них фактически есть два таких инициализатора: -initWithFrame: и -initWithCoder :, в зависимости от того, как создается представление. Вы должны переопределить -initWithFrame: если вы создаете представление в коде и -initWithCoder: если вы загружаете его из ниба. Или вы можете поместить свой код в третий метод и переопределить оба эти инициализатора таким образом, чтобы они вызывали ваш третий метод. На самом деле, это часто рекомендуемая стратегия.

+0

Я на самом деле не просил технических подробностей, мой вопрос был: Является ли этот подход неправильным? – Eliott

+0

Итак, проблема в том, что вы ожидали ответа «ДА» без объяснения причин? Ok –

+0

Однако в классах mac os x и NSView не всегда вызывается initWithFrame. Технические подробности здесь http://stackoverflow.com/questions/5374076/nsview-initialization-init-vs-awakefromnib –

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

  • Нет связанных вопросов^_^