Обычно, когда я подкласс класса 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
в вашей реализации, потому что вы должны просто делать то, что ясно и правильно.
- 1. super init возвращает nil
- 2. Почему мне нужно называть super -dealloc последним, а не первым?
- 3. Какая правильная секвенция для вызова [super viewWillAppear] [super viewDidLoad] и т. Д.?
- 4. Super init in Swift
- 5. Self = [super init]
- 6. Нужно ли использовать super() .__ init __() в этом случае?
- 7. Когда называть метод super in
- 8. Когда мне нужно вызвать `super` из конструктора?
- 9. Super init vs. parent .__ init__
- 10. super init больше не работает
- 11. Назначение if (self == [super init])
- 12. Когда использовать [Super init] iOS
- 13. Нужно ли мне называть [convertToGl]?
- 14. Почему требуется [super loadView] или [super viewDidLoad]?
- 15. Не нужно ли добавлять super() в конструктор?
- 16. Objective-c - что возвращает [super init]?
- 17. Можно ли не вызвать [super init] в пользовательском методе инициализации?
- 18. Почему я должен называть super() в Java?
- 19. Вызов init в init, перед self = [super init]
- 20. Почему в Objective-C мы используем self = [super init] вместо просто [super init]?
- 21. Могу ли я использовать assert() для обнаружения сбоя [super init]?
- 22. Можно ли назвать [super loadView]?
- 23. initWithCoder: не видно в NSObject?
- 24. Objective-c: Вопросы о self = [super init]
- 25. super init Sprites не поддерживает позицию
- 26. не-ARC: Должен ли я называть [super init] перед [self release]?
- 27. Может ли кто-нибудь дать мне легкое объяснение о «self = super init»?
- 28. Что делать, если [super init] возвращает nil?
- 29. `[super viewDidLoad]` convention
- 30. Почему мне нужно использовать [super% methodname%] в iOS?