En Objective-C, ¿por qué debería verificar si self = [super init] no es nulo?

Tengo una pregunta general acerca de cómo escribir métodos init en Objective-C.

Lo veo en todas partes (el código de Apple, los libros, el código fuente abierto, etc.) que un método init debería verificar si self = [super init] no es nulo antes de continuar con la inicialización.

La plantilla predeterminada de Apple para un método de inicio es:

- (id) init
{
    self = [super init];

    if (self != nil)
    {
        // your code here
    }

    return self;
}

¿Por qué?

Quiero decir, ¿cuándo volverá alguna vez init a cero? Si llamé a init en NSObject y obtuve cero de vuelta, entonces algo debe ser realmente jodido, ¿verdad? Y en ese caso, puede que ni siquiera escribas un programa ...

¿Es realmente tan común que un método de inicio de clase pueda devolver nil? Si es así, ¿en qué caso y por qué?

Respuestas a la pregunta(9)

Su respuesta a la pregunta