¿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
}
¿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
}
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
.
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.
En realidad, 'self' en un método init no es una clase. Es una instancia no inicializada de la clase actual. – Chuck
Sí, correcto. Gracias por la corrección. –
leer este documento manzana en la inicialización http://developer.apple.com/library/mac/#documentation/cocoa/Conceptual/ObjectiveC/Chapters/ocAllocInit.html
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];
}
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 –
Acabo de descubrir que esto se explica mejor en la clase 4 (a unos 25 minutos) de Standford iOS Lecture. – NSExplorer