Sous le capot, les objets Objective-C sont fondamentalement des structs C. Chacun d'entre eux contient un champ appelé isa
qui est un pointeur vers la classe dont l'objet est une instance (c'est ainsi que l'objet et le runtime Objective-C savent de quel type d'objet il s'agit).
Concernant l'initialisation des variables : en Objective-C, les variables d'instance sont automatiquement initialisées à 0
(pour les types C comme int
) ou nil
(pour les objets Objective-C). Les directives d'Apple stipulent que l'initialisation de vos ivars à ces valeurs dans vos objets Objective-C doit se faire dans le respect des règles de l'art. init
est redondant, alors ne le faites pas. Par exemple, disons que vous avez une classe comme celle-ci :
@interface MyClass : NSObject
{
int myInt;
double myDouble;
MyOtherClass *myObj;
}
@end
Rédiger votre init
de cette manière serait redondant, puisque ces ivars seront initialisés à la valeur 0
o nil
de toute façon :
@implementation MyClass
- (id)init
{
if ((self = [super init])) {
myInt = 0;
myDouble = 0.0;
myObj = nil;
}
return self;
}
@end
Vous pouvez faire ceci à la place :
@implementation MyClass
- (id)init
{
return [super init];
}
@end
Bien sûr, si vous voulez que les ivars soient initialisés à des valeurs autres que 0
o nil
vous devez quand même les initialiser :
@implementation MyClass
- (id)init
{
if ((self = [super init])) {
myInit = 10;
myDouble = 100.0;
myObj = [[MyOtherClass alloc] init];
}
return self;
}
@end