Initialisation avec new, alloc init....???
LeLaid
Membre
Encore bonjour et encore une question... plus métaphysique cette fois :P
Quelle est la différence entre les initialisations suivantes?
J'avoue ne pas bien comprendre quand je dois initialiser un objet... et quand je ne dois pas le faire....
Y a-t-il une documentation spécifique sur le sujet?
Pascal
Quelle est la différence entre les initialisations suivantes?
- [[xxx alloc] init]
- [xxx new]
J'avoue ne pas bien comprendre quand je dois initialiser un objet... et quand je ne dois pas le faire....
Y a-t-il une documentation spécifique sur le sujet?
Pascal
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
... Sauf si ça a été sous-classé.
Merci
C'est marqué depuis 10.0 dans la doc, donc tu dois te tromper :P (ou alors la doc est fausse...)
J'ai regardé parce que ça m'étonnait aussi ; jamais entendu parler...
Ah non, c'est pas de commodité puisque pas auto-released :P
(Selon la définition d'Apple...
)
D'après ce que j'ai cru comprendre des discussions précédentes sur ce forum, le garbage collector cela signifie souvent dans un premier temps "Pas Vu, Pas Pris", puis dans un second temps "Pris, Pendu".
Bref il vaut mieux bien suivre le retain-release et maà®triser pas à pas la gestion de la mémoire. Enfin c'est mon avis.
Le Garbage Collector, c'est bien et ça semble pratique car le principe à la base c'est "je crée mon objet, et je m'en fous ensuite, il va se démerder pour le détruire quand il verra que j'en ai plus besoin" donc vu comme ça on se dit "ouah trop cool plus la peine de se prendre la tête avec les retain/release, je me pose plus de questions je code comme un porc"...
Mais en fait y'a plein de petites subtilités dans le Garbage Collector (les strong et weak references, le drain de l'autoreleasepool, et plein de petits chausse-trappes cachés) et en plus côté pédagogique c'est zéro... d'autant que pour comprendre les subtilités du GC faut à mon sens avoir déjà compris le fonctionnement habituel de la mémoire (donc du retain/release) pour capter pourquoi ça peut coincer parfois... En plus les règles du retain/release sont finalement pas si compliquées pour pas dire super simples si on respecte les 4 ou 5 points donnés par Apple qui sont somme toute logiques. Juste une question d'habitude quoi.
Après, y'a certainement des partisans du Garbage Collector, encore plus ceux qui viennent du monde Java (Java utilise aussi un GC, d'ailleurs il n'utilise que ça y'a pas moyen de supprimer explicitement un objet... à part le mettre à null mais de toute façon ça impose que le GC fasse un cycle de vérification pour se rendre compte qu'alors on utilise plus l'objet... bref)... mais moi je trouve ça limite dangereux voir antipédagogique.
C'est un peu comme les bindings en somme : l'idée de base est séduisante, et on a envie de céder à la facilité en se disant "ouah ça nous évite de nous prendre le chou"... mais quand on creuse un peu et à l'usage, surtout si on veut faire des trucs un peu plus poussés... on se rend vite compte des limitations. Donc l'idée est bonne, ça semble plus simple, mais je trouve ça piégeant à terme.
En fait là où j'avais eu un peu de mal à comprendre c'était avec les autorelease, je trouvais que ça ressemblais au GC finalement.
Je vais quand même allez relire ce chapitre et essayer de rendre mon code plus propre tant qu'il est encore petit!
Non, c'est tout le contraire. Il vaut mieux éviter le GC, au moins quand on débute.
L'autorelease est un simple release retardé.
Après ce n'est que mon avis (partagé à priori par Philippe), y'en a qui sont pas si radicaux que nous, et n'ayant pas fait assez de Java pour savoir te dire si les pièges du GC qu'on a sous Objective-C sont des pièges que tu connais peut-être déjà pour avoir vu les mêmes en Java ou pas du tout... mais bon quand on regarde proprement comment fonctionne le retain/release/autorelease finalement c'est pas si méchant et logique donc à mon avis mieux de s'y mettre dès le départ.
D'autant que si un jour tu passes à l'iPhone pour développer sur iPhone en plus de sous Mac, il faudra de toute façon t'y mettre car sous iPhone le GC n'est pas disponible Donc autant s'y mettre de suite :P
L'auto-release ça n'a rien à voir avec. ça consiste à mettre des objets dans une liste qui sera vidée à la fin de l'événement.