2012-09-14 34 views
5

¿Tiene sentido escribir self = [super init]; en un método de inicialización personalizado mientras se subclasifica NSObject? Sé que es necesario cuando se subclasifica cualquier otra clase, porque puede tener una inicialización personalizada, pero ¿el método init de NSObject hace algo?¿El método init de NSObject hace algo?

+4

Es un buen hábito para entrar. – Kyle

Respuesta

9

Un objeto no está listo para ser utilizado hasta que se haya inicializado. El método init definido en la clase NSObject no inicializa; simplemente regresa a sí mismo.

Así que, básicamente, no necesariamente tiene que llamar al [super init] en una subclase NSObject, pero aún así lo recomendaría. Es simplemente un mejor diseño. Si cambias la superclase, seguirá funcionando.

Fuente: NSObject Class Reference.

+5

+1 por "Todavía lo recomendaría": la implementación de NSObject podría cambiar, podría cambiar la clase de la clase, etc. No es tarea de su clase inferir cosas sobre el comportamiento de su superclase. – Tim

+0

Gracias, eso tiene sentido. :) –

+4

No, en realidad, su código es ** incorrecto ** si no lo hace 'self = [super init ...];'. No importa lo que haga la implementación de 'NSObject'; utilice el patrón en todas partes constantemente para minimizar la fragilidad y porque seguir los patrones correctos documentados conduce a aplicaciones más fáciles de mantener. – bbum

Cuestiones relacionadas