Soy del mundo C++ por lo que la idea de asignar this
Me hace temblar:La asignación a uno mismo en Objective-C
this = new Object; // Gah!
Pero en Objective-C no es una palabra clave similares, self
, para el que este es perfectamente aceptable:
self = [super init]; // wait, what?
Una gran cantidad de código de ejemplo de Objective-C utiliza la línea anterior en init
rutinas. Mis preguntas:
1) ¿Por qué la asignación a self
tiene sentido (como respuestas "porque el lenguaje lo permite" no cuentan)
2) ¿Qué pasa si no se asigna self
en mi rutina init
? ¿Estoy poniendo mi caso en algún tipo de peligro?
3) Cuando la sentencia que sigue if
falla, ¿qué significa y qué debo hacer para recuperarse de ella:
- (id) init
{
self = [super init];
if (self)
{
self.my_foo = 42;
}
return self;
}
¿Por qué la gente está tan sorprendida cuando diferentes idiomas tienen diferentes convenciones y reglas diferentes? Si no lo hicieran, todos serían iguales. –
En este caso particular, Objective-C está estrechamente relacionado con C y C++, y la noción de asignar 'this' en esos idiomas tiene una connotación muy diferente a la de 'self' – fbrereto
Objective-C está estrechamente relacionado con C, no con C++ . No tiene ninguna relación con C++ y, por lo tanto, tiene una convención diferente para tratar con objetos y para la inicialización de objetos. –