2010-04-17 4 views
0

Je suis encore nouveau sur Cocoa et je ne connais pas grand chose à la gestion de la mémoire. J'ai lu sur la documentation d'Apple mais je suis toujours confus. Ma question est si je fixe la valeur d'une variable dans un - (void)dowhatever quand dowhatever se termine, le contenu de la variable sera-t-il effacé? Si oui est-il une méthode (sans écrire dans un fichier) que je peux utiliser pour conserver le contenu de la variable?Conserver l'information dans le cacao?

Merci pour toute aide

Répondre

2

Ma question est de savoir si je mets la valeur d'une variable dans un - (void)dowhatever lorsque le vide se termine, ...

void est un type. Il n'a pas de commencement et pas de fin. Plus précisément, c'est le type de retour de la méthode dowhatever. Si dowhatever a renvoyé une valeur, le type de cette valeur de retour serait void; il dirait, par exemple, - (NSUInteger) doWhatever. Avoir void signifie que la méthode ne renvoie pas de valeur.

Voir aussi le document Objective-C 2.0 Programming Language.

... le contenu de la variable sera-t-il effacé?

S'il s'agit d'une variable locale, la variable cessera d'exister lors du retour de la méthode.

Une variable d'instance existe tant que l'instance (objet) dont la variable fait partie existe, c'est-à-dire tant que l'instance n'est pas désallouée.

Les variables d'instance sont également traitées dans la documentation Objective-C.

Si oui existe-t-il une méthode (sans écrire dans un fichier) que je peux utiliser pour conserver le contenu de la variable?

Si vous avez simplement besoin de renvoyer l'objet à votre interlocuteur, conservez-le et autorélez-le. Voir le Memory Management Programming Guide for Cocoa pour plus d'informations.

Si ce n'est pas ce que vous faites, alors la question devient pourquoi vous avez besoin de l'objet pour rester en vie. Pensez en termes d'objets: Un objet peut posséder certains autres objets et possède une variable d'instance pour chaque objet qu'il possède *. Tant que vous possédez vos droits et que vous les respectez dans le code, les durées de vie des objets fonctionnent.

Si l'objet A a besoin d'un autre objet B, alors A doit posséder B. Cette propriété n'est pas exclusive; il peut co-posséder B. Mais il doit au moins co-propriétaire B; B restera en vie tant qu'il aura au moins un propriétaire.

Cela fait également partie du Guide de gestion de la mémoire. Pour d'autres exemples de relations entre objets, vous devez parcourir le Cocoa Fundamentals Guide, en particulier le chapitre sur Cocoa's design patterns, et vous pouvez parcourir sample code pour voir ces modèles démontrés en pratique.

* Il peut également avoir des variables d'instance pour les objets qu'il ne possède pas, tels que les délégués. Vous pouvez avoir une variable d'instance pour un objet que vous ne possédez pas, mais si vous le possédez, vous devriez avoir une variable d'instance pour cela.