Przypisywanie sobie w Objective-C

Jestem ze świata C ++, więc pojęcie przypisaniathis sprawia, że ​​drżę:

this = new Object; // Gah!

Ale w Objective-C istnieje podobne słowo kluczoweself, dla których jest to całkowicie dopuszczalne:

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

Wiele przykładowego kodu Objective-C używa powyższej linii winit procedury. Moje pytania:

1) Dlaczego przypisanie doself ma sens (odpowiedzi takie jak „ponieważ język na to pozwala” nie licz)

2) Co się stanie, jeśli nie przypiszęself w moiminit rutyna? Czy kładę mój przypadek w jakimś niebezpieczeństwie?

3) W następujących przypadkachif oświadczenie nie powiedzie się, co to znaczy i co mam zrobić, aby odzyskać z niego:

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

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

    return self;
}

questionAnswers(6)

yourAnswerToTheQuestion