2012-03-20 1 views
1

При чтении «целевого c-гида» с сайта-разработчика Apple у меня есть некоторые вопросительные знаки. Из этого question Я уже знаю, что вызываются методы sub и superclass 'initialize'. Мой вопрос: почему это происходит? Я знаю из этого сообщения также, что инициализация всегда вызывается, но это правда, когда я никогда не использую сам суперкласс и только подкласс?Как метод инициализации подкласса Objective C вызывает метод инициализации суперкласса

Незначительное связанный с этим вопрос, который приходит на ум по этой теме:

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

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

Спасибо!

ответ

4

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

+0

супер, спасибо! – Pega88