2011-07-03 15 views
5

¿Por qué siempre hacemos esto al crear constructores en Objective C?Creación de constructores en Objective-C

self = [super init]; 
if (self) { 
    //Initialization code here 
} 
+3

La pregunta [Algunas preguntas/iPhone principiante de Objective-C] (http: // stackoverflow.com/questions/710568/some-beginner-objective-c-iphone-questions) pregunta lo mismo en la primera parte, y debes leer la respuesta de Barry allí. Ver también "self = [stupid init] de Wil Shipley;" artículo para obtener más información: http://www.wilshipley.com/blog/2005/07/self-stupid-init.html –

+0

Acabo de descubrir que esto se explica mejor en la clase 4 (a unos 25 minutos) de Standford iOS Lecture. – NSExplorer

Respuesta

7

Nos reasignar a self porque [super init] se le permite devolver un objeto diferente a la que se le llamó sucesivamente. Nos if (self) porque [super init] puede devolver nil.

1

self es una clase basada en alguna superclase (por ejemplo, UIViewController, NSObject: consulte su archivo de interfaz para asegurarse de cuál). La superclase podría necesitar alguna forma de inicialización para que la subclase funcione como se espera. Entonces al inicializar primero la superclase nos aseguramos de que se establezcan las propiedades predeterminadas y similares. Sin inicializar primero la superclase, podríamos experimentar un comportamiento muy inesperado, especialmente en objetos más complejos como ViewControllers y similares.

+4

En realidad, 'self' en un método init no es una clase. Es una instancia no inicializada de la clase actual. – Chuck

+0

Sí, correcto. Gracias por la corrección. –

9

puede crear constructor y el destructor en Objective-C con

-(id) init 
{ 
    self = [super init]; 
    if(self) 
    { 
     //do something 
    } 
    return self; 
} 
-(void) dealloc 
{ 
    [super dealloc]; 
} 
Cuestiones relacionadas