Normalmente, cuando hago una subclase de una clase UI
, llamaré al inicializador de superclase de interés. Sin embargo, no estoy seguro de los detalles de implementación de NSObject
, y parece que no hay mucho que hacer en términos de miembro vars, entonces me pregunto: ¿tengo que llamar al [super init]
si mi subclase se extiende a NSObject
?¿Tengo que llamar a [super init] o [super initWithCoder], etc. para NSObject
Respuesta
Técnicamente, no. El documentation for -[NSObject init]
dice que
El método
init
definido en la claseNSObject
hace ninguna inicialización; simplemente devuelveself
.
Debido a que está documentado y es probable que haya ya un montón de código que se basa en él, ese hecho es altamente poco probable que cambie en futuras versiones de Mac OS X.
Editar:BoltClock's a Unicorn trae un punto que me gustaría hacer más hiperbólico: el tiempo total ahorrado al no llamar al -[NSObject init]
para todos los que alguna vez ejecuten su programa es poco probable que supere el tiempo de depuración en el que incurriría si alguna vez cambia la superclase de su clase a algo que no sea NSObject
y olvide agregar una llamada al [super init]
.
Desde el documentation, no parece hacer cualquier inicialización en absoluto:
El método
init
definido en la clase NSObject hace ninguna inicialización; simplemente devuelveself
.
supongo que sería inocua, que no llame a [super init]
, pero no hay razón para no seguir las convenciones y, ya sabes, lo llaman en la subclase de todos modos. Por ejemplo, su subclase puede terminar heredando de otra clase en el futuro, que puede contener lógica de inicialización en su propio método -init
que su subclase requerirá.
Simplemente llame a través de uno de los inicializadores designados de super
en su implementación, ya que debe hacer lo que es claro y correcto.
- 1. ¿Por qué [super init] alguna vez devolvería nil, cuando "super" es NSObject?
- 2. Llamar a super()
- 3. ¿Por qué en Objective-C usamos self = [super init] en lugar de solo [super init]?
- 4. initWithCoder: no visible en NSObject?
- 5. ¿Debo llamar a super() o llamar a this() para los constructores de vista personalizada de Android?
- 6. ¿Es necesario llamar a [super encodeWithCoder] cuando se subclasifica un objeto que implementa NSCoding?
- 7. ¿No tengo que llamar a super() en el constructor cuando la clase extiende Sprite en actionscript3?
- 8. ¿Está bien llamar a [super loadView]?
- 9. ¿Siempre tengo que llamar a [super viewDidLoad] en el método -viewDidLoad?
- 10. ¿Qué es "super" en Objective-C? (¡sí! = super)?
- 11. Java:. Cómo llamar a super() super() en el método reemplazado (método abuelos)
- 12. Llamando al método de clase super super
- 13. ¿Cuándo llama al método super en viewWillAppear, viewDidDisappear, etc ...?
- 14. `[super viewDidLoad]` convención
- 15. Powermock, Mockito nullpointerexception al llamar a super() JDialog
- 16. java.lang.VerifyError: (clase: ea/Individual, método: <init> firma: (I) V) El constructor debe llamar a super() o this()
- 17. ¿El método init de NSObject hace algo?
- 18. ¿Por qué llamar a super() en un constructor?
- 19. Python clase super reflexión
- 20. onCreateOptionsMenu() llamando al super
- 21. Generifying con "super"
- 22. Ruby: módulos y super?
- 23. ¿Cuándo NO llamar al método super() al anular?
- 24. Función super() de Python
- 25. método debe llamar al error super() en Netbeans
- 26. ¿Cuándo se llama a initWithCoder?
- 27. lo que hace `super()` `en __new__`
- 28. Maven Super POM
- 29. Python super() plantea TypeError
- 30. [self release], [self dealloc] o [super dealloc] en los métodos init?