La explicación es sencilla, en Objective-C la creación de un objeto está separada en dos fases diferenciadas, al contrario que otros lenguajes como C++. Por un lado está el alojamiento en memoria (alloc) y por otro la inicialización (init).
Cuando se va a llamar al init, el self de un objeto siempre apunta al objeto devuelto por alloc. Aunque no es habitual, existe la posibilidad de que, en la segunda fase de la creación, en el init del padre, se elimine el objeto actual y se cree uno nuevo, que sea el que se devuelve. Generalmente esto no suele usarse, por lo que la instrucción:
[super init]; // código de inicialización
generalmente es válida pero, para asegurarnos, no está de más que nuestras inicializaciones sean del tipo
if (self = [super init]) { // código de inicialización }
Y terminar siempre con un:
return self;
Etiquetas: Objective-C