Обычно, когда я подкласс класса UI
, я буду вызывать интересный инициализатор суперкласса. Тем не менее, я не уверен в деталях реализации NSObject
, и кажется, что с точки зрения членских варов не так много, поэтому я задаюсь вопросом: нужно ли мне звонить [super init]
, если мой подкласс расширяет NSObject
?Нужно ли мне называть [super init] или [super initWithCoder] и т. Д. Для NSObject
ответ
Технически, нет. documentation for -[NSObject init]
говорит, что
init
метод, определенный в классеNSObject
не делает никакой инициализации; он просто возвращаетself
.
Потому что документируется и там, наверное, уже куча кода, который опирается на него, является тот факт весьма вряд ли изменится в будущих версиях Mac OS X.
Edit:BoltClock's a Unicorn приносит что я хотел бы сделать более гиперболическим: общее время, сэкономленное, не вызывая -[NSObject init]
для всех, кто когда-либо запускал вашу программу, вряд ли когда-либо превысит время отладки, которое вы понесли бы, если бы вы когда-либо изменили суперкласс для своего класса на что-то кроме NSObject
и забудьте добавить звонок в [super init]
.
С documentation, он не появляется, чтобы делать какие-либо инициализации вообще:
init
метод, определенный в классе NSObject не делает никакой инициализации; он просто возвращаетself
.
Я полагаю, что было бы безвредным не называть [super init]
, но нет никаких причин не следовать конвенции и, вы знаете, вызовите ее в подклассе в любом случае. Например, ваш подкласс может в конечном итоге наследовать от другого класса в будущем, который может содержать логику инициализации в своем собственном методе -init
, который тогда потребует ваш подкласс.
Просто выполните один из назначенных инициализаторов super
в вашей реализации, потому что вы должны просто делать то, что ясно и правильно.