Em Objective-C, por que devo verificar se self = [super init] não é nulo?

Eu tenho uma pergunta geral sobre como escrever métodos init em Objective-C.

Eu vejo em todos os lugares (código da Apple, livros, código-fonte aberto, etc.) que um método init deve verificar se auto = [super init] não é nulo antes de continuar com a inicialização.

O modelo padrão da Apple para um método init é:

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

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

    return self;
}

Por quê?

Quero dizer, quando é que o init vai devolver nada? Se eu chamei init no NSObject e tenho nulo de volta, então algo deve estar realmente errado, certo? E nesse caso, você pode nem escrever um programa ...

É realmente tão comum que um método init de classe possa retornar nulo? Se sim, em que caso e por quê?

questionAnswers(9)

yourAnswerToTheQuestion