Copy, dealloc et garbage
Tchouboudou
Membre
Bonsoir les gens.
Aujourd'hui, j'ai ouvert XCode (oOoOo) et j'ai fait des petits testounets. Et j'ai voulu essayer copy. ça marche, mais pour être franc, je vois pas la différence en un copy et un retain :
Aussi, j'ai insérer une méthode dealloc, mais elle n'est pas utilisé (j'y ai mis un NSLog pour voir). Est-ce normal ?
Enfin, comment on utilise le garbage collection d'Objective-C 2.0 (après l'avoir mis en Supported ou Required dans XCode) ?
Merci d'avance,
Tchouboudou
Aujourd'hui, j'ai ouvert XCode (oOoOo) et j'ai fait des petits testounets. Et j'ai voulu essayer copy. ça marche, mais pour être franc, je vois pas la différence en un copy et un retain :
aString = [string copy] et aString = [string retain] // C'est pas la même chose ?
Aussi, j'ai insérer une méthode dealloc, mais elle n'est pas utilisé (j'y ai mis un NSLog pour voir). Est-ce normal ?
Enfin, comment on utilise le garbage collection d'Objective-C 2.0 (après l'avoir mis en Supported ou Required dans XCode) ?
Merci d'avance,
Tchouboudou
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Par exemple, si ton objet est modifiable comme une NSMutableString, alors -copy créera une nouvelle instance de ta chaà®ne de caractères et la retournera avec un nombre de référence à 1.
Dans le cas d'une NSString, un objet non-modifiable, copier l'objet ne servirait à rien, tu ferais un deuxième objet qui n'est pas plus modifiable que le premier, tu ne pourras modifier aucun des deux, alors autant économiser la mémoire et faire un simple retain dessus. C'est ce qu'il se passe avec les NSString.
Par contre, si la classe implémente le protocole NSMutableCopying, et que tu envoies le message -mutableCopy, là tu auras bien deux objets différents.
Pour ton dealloc, tu l'as bien déclaré comme il faut, avec le "-" et tout ?
J'ai mis - (void)dealloc comme d'habitude.
C'est bizarre...
J'ajoute que le programme, c'est juste un test ou j'ai mis une NSString, qui dans l'init, j'ai fait string = [[NSString alloc] initWithString:@Test];
Alors comme j'ai pas le reste de ton code je peux pas vraiment dire ce qui cloche.
Si oui, où ? Et qu'est-ce qui te fait penser qu'il l'est ? Et pour finir, où est-il supprimé et qu'est-ce qui te fait penser qu'il l'est ?
(En simplifiant : montre-nous ton code ;D)
Par contre, pour la suppression, je sais pas, justement.
Aussi, j'ai vu que le main.m était différent, et qu'il ne marquait pas le NSAutoreleasePool. Est-ce qu'il y a un moyen de l'avoir dès la création d'un nouveau projet ?
Sinon pour ton -dealloc, il n'y a rien à faire, il est supprimé automatiquement quand tu fermes l'application, c'est le seul moment où il a besoin d'être désalloué.
La majorité des applications fonctionnent comme ça alors... non peut être pas besoin de forcer le release puisque ton code est juste... enfin à mon avis.