nickydaquick
Messages postés416Date d'inscriptionvendredi 31 janvier 2003StatutMembreDernière intervention19 décembre 20133 22 juil. 2009 à 17:37
Salut,
tout est presqu'exact . Alors en reprenant ta logique, tu dois creer une fonction dispose():
1- supprimant de la scene du clip (A) les clips presents dans le clip A via boucle en supprimant les EventListener s'il y en a et en mettant a null ces clips
2- supprimant de la scene du clip (B) le textfield dans le clip B puis le mettre a null
3- supprimant de la scene du clip (S) le clip A et B puis en les mettant a null
4- supprimant de la scene le clip S
Il reste enfin a mettre a null l'objet CustomClass lui-meme, mais comment ?
myObjt = null;
avant l'instanciation de celui ci en vérifiant s'il existe ?
tres bonne idee mais pas necessaire sauf si tu reutilises ta variable maintes fois avec des donnees differentes et qu'il te faut absolument recreer un clip (S) a chaque fois.
Petite chose, les clips presents (par exemple) dans le clip a sont mis a null seulement si tu as une reference sur eux.
exemple
var txt:TextField new TextField, clipA:Sprite new Sprite;
clipA.addChild(txt); //<---- dans ce cas lors du dispose txt doit etre mis a null
function rajouterTextField():void
{
clipA.addChild(new TextField);//<--- reference faible: mettre clipA a null suggere que ce textField est aussi libre
}
http://liveplayaz.com je suis heureux de faire partie d'une grande famille ...!
faiblard
Messages postés337Date d'inscriptionsamedi 3 février 2007StatutMembreDernière intervention 4 janvier 2011 20 juil. 2009 à 16:09
Bonjour,
De toutes façon il vaut mieux supprimer un objet/variable si tu n'en as plus besoin...
Pour ce qui est du garbage collector il passe quand il veut tu n'as pas la main dessus :D Il peut même ne jamais passer....
-------------------------------------------------------------------
La recherche est ton amie ! Promis elle ne te mordra pas...
Enjoy
N'oubliez pas d'accepter pour aidez les autres quand ils cherchent !
nickydaquick
Messages postés416Date d'inscriptionvendredi 31 janvier 2003StatutMembreDernière intervention19 décembre 20133 20 juil. 2009 à 16:10
Salut,
premierement , ca ne sert a rien de detruire une variable si tu comptes la reutiliser(la reallouer avec les memes proprietes) encore apres. Je m'excuse d'avance si c'est juste le fait de ne pas bien avoir compris le but de l'exemple.
Pour ta question de Garbage collection, 3 conseils:
1- toutes les variables doivent etres mises a nulles , les composants graphiques (shape,sprite,bitmap et autres) doivent etre retires de la scene avant d'etre mis a null. exemple ton removeChild(myClip) suivi de myClip = null;
2- si jamais tu utilises un ecouteur d'evenements, utilise le avec une reference faible.
myBtn.addEventListener(MouseEvent.CLICK, changeSection,false,0,true);
false: a la phase cible
0 : niveau de priorite
true : utilise une reference faible
Avant donc de mettre a null, ta variable, deleste la de l'ecouteur d'evenement.
myBtn.removeEventListener(MouseEvent.CLICK, changeSection,false);
3- Si necessaire (mais moins souvent que possible neanmoins) faire un appel a System.gc();
faiblard
Messages postés337Date d'inscriptionsamedi 3 février 2007StatutMembreDernière intervention 4 janvier 2011 20 juil. 2009 à 16:24
Sauf que System.gc() ne marche uniquement que dans la version debogueur du flash player !
Pour en revenir a la réutilisation d'une variable je ne suis pas d'accord avec nicky, si tu dois réutilisé ta variable mais seulement dans très longtemps je ne vois pas l'utilité de la conserver...
-------------------------------------------------------------------
La recherche est ton amie ! Promis elle ne te mordra pas...
Enjoy
N'oubliez pas d'accepter pour aidez les autres quand ils cherchent !
Vous n’avez pas trouvé la réponse que vous recherchez ?
Orange73
Messages postés1375Date d'inscriptiondimanche 28 novembre 2004StatutMembreDernière intervention 2 août 2011 20 juil. 2009 à 20:43
ok,
merci pour vos réponse..
maintenant, j'ai une autre question a propos de cela :
Imaginons que j'ai une classe CustomClass possedant des methodes dont une creant un sprite et l'ajoutant au stage via addChild();
Ce sprite possede des EventListeners.
Si ma classe est instanciée et que je souhaite supprimer cet objet plus tard... dois-je crée une methode dispose(); supprimant le sprite de la scene ainsi que ses EventListeners puis mettre ce sprite a null ? ou le fait de mettre simplement l'instance a null est suffisant ?
Merci
-- Orange73 --
"L'homme n'est pas fait pour travailler, la preuve c'est que cela le fatigue" (Voltaire)
nickydaquick
Messages postés416Date d'inscriptionvendredi 31 janvier 2003StatutMembreDernière intervention19 décembre 20133 20 juil. 2009 à 22:53
Salut,
la premiere option est celle que je conseille, et que je mets en pratique dans mes codes:
creer une fonction membre qui libere les variables membres relatives a un objet avant de le liberer lui-meme.
Bonne continuation
http://liveplayaz.com je suis heureux de faire partie d'une grande famille ...!
Orange73
Messages postés1375Date d'inscriptiondimanche 28 novembre 2004StatutMembreDernière intervention 2 août 2011 21 juil. 2009 à 09:15
Ok, merci pour ta réponse.
Du coup imaginons que dans ma classe je fais une boucle creant par exemple une dizaine de sprite ou autre... Dans la méthode dispose(); je dois recreer cette boucle puis supprimer leurs EventListeners ainsi que les mettre a null ?
Merci
-- Orange73 --
"L'homme n'est pas fait pour travailler, la preuve c'est que cela le fatigue" (Voltaire)
Orange73
Messages postés1375Date d'inscriptiondimanche 28 novembre 2004StatutMembreDernière intervention 2 août 2011 22 juil. 2009 à 09:18
Hello,
Merci
Dernière chose (je penses ),
imaginons ce code :
myObj:CustomClass = new CustomClass();
Cette classe créé un sprite (S) en l'ajoutant a la scene avec addChild();
Dans ce sprite, creation de 2 clips, l'un (A) contenant une dizaine de clip créé via boucle for et l'autre (B) contenant un simple textfield.
Donc, si j'ai bien compris, je dois créer une methode dispose(); par exemple,
- supprimant de la scene les clips present dans le clip A via boucle en supprimant les EventListener s'il y en a et en mettant a null ces clips
- supprimant de la scene le textfield dans le clip B puis les mettre a null
- supprimant de la scene le clip A et B puis en les mettant a null
- supprimant de la scene le clip S
Il reste enfin a mettre a null l'objet CustomClass lui-meme, mais comment ?
- dans la methode dispose()
this = null
- avant l'instanciation de celui ci en vérifiant s'il existe ?