2012-04-02 2 views
8

Обычно, когда я подкласс класса UI, я буду вызывать интересный инициализатор суперкласса. Тем не менее, я не уверен в деталях реализации NSObject, и кажется, что с точки зрения членских варов не так много, поэтому я задаюсь вопросом: нужно ли мне звонить [super init], если мой подкласс расширяет NSObject?Нужно ли мне называть [super init] или [super initWithCoder] и т. Д. Для NSObject

ответ

8

Технически, нет. documentation for -[NSObject init] говорит, что

init метод, определенный в классе NSObject не делает никакой инициализации; он просто возвращает self.

Потому что документируется и там, наверное, уже куча кода, который опирается на него, является тот факт весьма вряд ли изменится в будущих версиях Mac OS X.

Edit:BoltClock's a Unicorn приносит что я хотел бы сделать более гиперболическим: общее время, сэкономленное, не вызывая -[NSObject init] для всех, кто когда-либо запускал вашу программу, вряд ли когда-либо превысит время отладки, которое вы понесли бы, если бы вы когда-либо изменили суперкласс для своего класса на что-то кроме NSObject и забудьте добавить звонок в [super init].

4

С documentation, он не появляется, чтобы делать какие-либо инициализации вообще:

init метод, определенный в классе NSObject не делает никакой инициализации; он просто возвращает self.

Я полагаю, что было бы безвредным не называть [super init], но нет никаких причин не следовать конвенции и, вы знаете, вызовите ее в подклассе в любом случае. Например, ваш подкласс может в конечном итоге наследовать от другого класса в будущем, который может содержать логику инициализации в своем собственном методе -init, который тогда потребует ваш подкласс.

0

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

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