Instanciation d'un classe
Core
Membre
Bonjour,
Dans la série mieux vaut avoir l'air ridicule le temps d'une question que rester stupide toute sa vie:
Quel est la fonction exacte de ces deux etapes (c'est surtout la deuxième qui me semble floue).
Dans la série mieux vaut avoir l'air ridicule le temps d'une question que rester stupide toute sa vie:
Quel est la fonction exacte de ces deux etapes (c'est surtout la deuxième qui me semble floue).
MaClass *monObjet ;
monObjet = [[MaClass alloc] init] ; [\code]
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Pour donner des explications, je vais décomposer cette ligne par :
[tt]
monObjet = [MaClass alloc];
monObjet = [monObjet init];
[/tt]
ce qui est strictement identique à ton code.
La première méthode exécutée est alloc. Il s'agit d'une méthode de classe (c'est MaClass qui exécute la méthode).
Cette méthode permet tout simplement de créer l'objet en mémoire. Après création, cette méthode renvoie la référence de cet objet (que tu stockes dans la variable monObjet).
La seconde méthode est init. c'est une méthode d'instance (c'est monObjet qui exécute la méthode).
Cette méthode initialise l'objet créé en mémoire par alloc. cette initialisation permet de mettre l'objet dans un état connu.
init renvoie à nouveau l'objet qui vient d'être initialisé (c'est pourquoi on restocke ça dans monObjet).
.
Pourrais tu me faire le meme topo pour la premiere etape :
[tt]
NSClasse *monObjet ;
[/tt]
permet de déclarer un pointeur (ou référence) d'objet dont la classe est NSClasse. Le pointeur de cet objet sera stocké dans la variable monObjet .
Donc il s'agit d'une bête déclaration de varaible C, au même titre que
[tt]int unNombre;
[/tt]pour déclarer un nombre entier, ou
[tt]char unCaractere;
[/tt]pour déclarer un caractère.
.
Tu es obligé de redéfinir le pointeur? [tt][objet init];[/tt] Ne serait pas suffisant? Il me semble que la fonction du init est de donner des valeurs acceptables aux variables d'instance (je dis il me semble car je peux imaginer que dans certains cas il peut y avoir d'autres choses, mais mon expérience limitée ne permet pas de les imaginer ). Parce que dans ce cas pour rester logique, il faudrait redéfinir le pointeur pour chaque changement de valeur d'une variable d'instance, ce qui n'est pas le cas.
Non ? Car c'est plein d'enseignement :
La doc complète est ici.
.
dans les quelques lignes de codes que j'ai ecrites, je n'ai pas utilisé init + alloc, en quoi cette etape est fondamendale ?
merci !!!!!!
Par contre, ces méthodes convénientes font aussi un autorelease sur l'objet crée, ce qui fait qu'on utilise souvent les méthodes convénientes pour avoir des objets temporaires, alors qu'on utilisera plutôt alloc+init pour avoir des objets que l'on veut garder longtemps en mémoire.
.