Как метод инициализации подкласса Objective C вызывает метод инициализации суперкласса - PullRequest
1 голос
/ 20 марта 2012

Читая «Руководство по объективному c» с сайта Apple, я получил несколько вопросительных знаков.Из этого вопроса я уже знаю, что методы инициализации как подкласса, так и суперкласса вызываются.Мой вопроспочему это происходит?Из этого поста я также знаю, что инициализация всегда вызывается, но разве это верно, когда я никогда не использую сам суперкласс, а только подкласс?

Небольшой связанный вопрос, который пришел в голову по этой теме:

  • Содержит ли подкласс «суперкласс», вместе с некоторыми новыми методами / переменными, или
  • копирует все из суперкласса в подкласс?

В первом случае я бы понял, что метод initialize будет отправлен «содержащимся» суперклассам внутри подкласса, во втором варианте я бы ожидал, что метод инициализации подкласса явно вызовет [super initialize], которого он не делает »т.

Спасибо!

1 Ответ

4 голосов
/ 20 марта 2012

Вызов +initialize является специальным и явно вызывается для каждого класса. Это делается за пределами обычной цепочки наследования, которую вы привыкли видеть. +initialize будет вызываться для каждого класса, подкласса и категории (да, категории получают свою собственную инициализацию) при первом обращении к ним.

...