Sono del mondo C++ in modo che il concetto di assegnazione this
fa venire i brividi:Assegnazione di auto in Objective-C
this = new Object; // Gah!
Ma in Objective-C v'è una parola chiave simile, self
, per il quale questo è perfettamente accettabile:
self = [super init]; // wait, what?
Un sacco di codice di esempio Objective-C utilizza la linea di cui sopra in init
routine. Le mie domande:
1) Perché assegnazione di self
un senso (risposte del tipo "perché la lingua gli permette" non contano)
2) Cosa succede se non si assegna self
nella mia routine di init
? Sto mettendo la mia istanza in una specie di pericolo?
3) Quando l'istruzione seguente if
fallisce, cosa significa e cosa devo fare per recuperare da esso:
- (id) init
{
self = [super init];
if (self)
{
self.my_foo = 42;
}
return self;
}
Perché le persone sono così sorprese quando lingue diverse hanno convenzioni e regole diverse? Se non lo facessero, sarebbero tutti uguali. –
In questo caso particolare, Objective-C è strettamente correlato a C e C++ e la nozione di assegnare "questo" in quelle lingue ha una connotazione molto diversa dall'assegnazione di 'self' – fbrereto
Objective-C è strettamente correlata a C, non a C++ . È totalmente estraneo al C++ e quindi ha una convenzione diversa per gestire gli oggetti e per inizializzare gli oggetti. –