Atribuindo a si mesmo em Objective-C

Eu sou do mundo C ++ assim a noção de atribuiçãothis me faz estremecer:

this = new Object; // Gah!

Mas no Objective-C existe uma palavra-chave semelhante,self, para o qual isso é perfeitamente aceitável:

self = [super init]; // wait, what?

Um monte de código Objective-C de amostra usa a linha acima eminit rotinas. Minhas perguntas:

1) Por que a designação paraself faz sentido (respostas como "porque a linguagem permite" não contam)

2) O que acontece se eu não atribuirself no meuinit rotina? Estou colocando minha instância em algum tipo de perigo?

3) Quando os seguintesif declaração falha, o que significa e o que devo fazer para me recuperar:

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

    if (self)
    {
        self.my_foo = 42;
    }

    return self;
}

questionAnswers(6)

yourAnswerToTheQuestion