Bajo el capó, los objetos de Objective-C son básicamente estructuras en C. Cada uno contiene un campo llamado isa
, que es un puntero a la clase que el objeto es una instancia de (así es como el objeto y el tiempo de ejecución de Objective-C saben qué tipo de objeto es).
En cuanto a la inicialización de variables: en Objective-C, las variables de instancia se inicializan automáticamente a 0
(para tipos de C como int
) o nil
(para objetos Objective-C). Las pautas de Apple dicen que inicializar tus ivars a esos valores en tus métodos init
es redundante, así que no lo hagas. Por ejemplo, decir que tenía una clase como esta:
@interface MyClass : NSObject
{
int myInt;
double myDouble;
MyOtherClass *myObj;
}
@end
la escritura de su método init
esta manera sería redundante, ya que esos Ivars serán inicializados a 0
o nil
todos modos:
@implementation MyClass
- (id)init
{
if ((self = [super init])) {
myInt = 0;
myDouble = 0.0;
myObj = nil;
}
return self;
}
@end
Usted puede hacer esto en su lugar:
@implementation MyClass
- (id)init
{
return [super init];
}
@end
Por supuesto, si desea que los ivars a ser inicializado a los valores distintos de 0
o nil
, aún debe inicializarlas:
@implementation MyClass
- (id)init
{
if ((self = [super init])) {
myInit = 10;
myDouble = 100.0;
myObj = [[MyOtherClass alloc] init];
}
return self;
}
@end
Gracias por la respuesta me gustaría saber acerca de esta línea. No inicialice las variables a 0 o nil en el método init; es redundante ¿Dónde deberíamos usar este patrón? ¿Significa que no debemos inicializar las variables en los datos Modal's –
? Siéntase libre de inicializar sus datos; simplemente no inicialice sus variables a '0' o' nil'. – sarnold
básicamente lo explicó sarnold, pero actualicé mi respuesta para abordar este problema. – mipadi