begin process at 2012 05 27 13:23:37
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Flash / Flash MX

 > 

Scripts

 > 

ActionScript

 > 

Garbage Collector


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Garbage Collector

dimanche 19 juillet 2009 à 18:14:50 | Garbage Collector

Orange73

Membre Club

Hello,

Juste une question pour savoir si on est conseillé d'utiliser le garbage collector ?

Exemple :

Code ActionScript :

function changeSection(e:MouseEvent):void
{
if(myClip){
removeChild(myClip);
myclip = null;
}
var myClip:MovieClip = new MovieClip();
myClip.name = "myClip0";
addChild(myClip);
}

myBtn.addEventListener(MouseEvent.CLICK, changeSection);


Donc savoir si cette partie est conseillée :
Code ActionScript :
if(myClip){

removeChild(myClip);
myclip = null;
}


Merci

A+

Orange73

lundi 20 juillet 2009 à 16:09:29 | Re : Garbage Collector

faiblard

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 !

lundi 20 juillet 2009 à 16:10:16 | Re : Garbage Collector

nickydaquick

Membre Club



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();

au revoir et Bonne continuation.


http://liveplayaz.com
je suis heureux de faire partie d'une grande famille ...!

lundi 20 juillet 2009 à 16:24:29 | Re : Garbage Collector

faiblard

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 !

lundi 20 juillet 2009 à 20:43:47 | Re : Garbage Collector

Orange73

Membre Club

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)

lundi 20 juillet 2009 à 22:53:36 | Re : Garbage Collector

nickydaquick

Membre Club



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 ...!

mardi 21 juillet 2009 à 09:15:51 | Re : Garbage Collector

Orange73

Membre Club


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)

mardi 21 juillet 2009 à 15:01:53 | Re : Garbage Collector

nickydaquick

Membre Club



Salut,

c'est entierement exact , et si tu les ajoutes dans un conteneur retire-les du conteneur aussi .

Bonne continuation.
http://liveplayaz.com
je suis heureux de faire partie d'une grande famille ...!

mercredi 22 juillet 2009 à 09:18:23 | Re : Garbage Collector

Orange73

Membre Club

Hello,

Merci

Dernière chose (je penses ),

imaginons ce code :

Code ActionScript :
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()

Code ActionScript :
this = null


- avant l'instanciation de celui ci en vérifiant s'il existe ?

Code ActionScript :

if(myObj != null)
{
myObj.dispose();
myObj = null;
}
myObj:CustomClass = new CustomClass();



Merci.

-- Orange73 --

"L'homme n'est pas fait pour travailler, la preuve c'est que cela le fatigue" (Voltaire)

mercredi 22 juillet 2009 à 17:37:46 | Re : Garbage Collector

nickydaquick

Membre Club
Réponse acceptée !


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 ...!


1 2

Cette discussion est classée dans : code, garbage, collector, myclip, changesection


Répondre à ce message

Sujets en rapport avec ce message

Optimisation code AS3 pour Garbage Collector [ par Orange73 ] Hello, J'aurai juste quelques question afin d'optimiser mon code AS3 pour le passage du Garbage Collector. 1/ Imaginons une classe : [code=as] packa Problème Tween et Flash Player 10 [ par Orange73 ] Hello, J'ai un soucis de Tween lorsque je publie avec le lecteur flash player 10 (fichier > parametres de publication > lecteur). Les tweens du code Organisation de code [ par Orange73 ] Hello, Juste une petite question concernant la methode de developpement a appliquer pour ce genre de projet : 3 template different pour 3 element de pb avec lien html dans "textField" (as3) [ par inaden ] Bonjour, voilà j'importe des données via XML et je les traite... tout va bien, mais les liens qui sont dedans ouvre dans la même fen^tre que celle du Debug d'un player music xml. AS2 [ par Castelcerf ] Salut tout le monde; Je viens sur le forum car je suis désespérer. [^^confus5] J'ai fait un ptit site bénévolement pour un crew de muicien que je con Sauvegarder un jpg (as3) [ par Kangouroops ] Bonjour tout le monde, Je suis entrain de faire un générateur d'avatar et je bloque à un point essentiel, la sauvegarde de l'avatar. Alors j'ai testé MON CODE ATTACHEMOVIE FONCTIONNE MAL [ par BBFUNK01 ] Bonjour à tous, je suis en train d'essayer de rédiger un code pour charger un clip "clipform" de ma bibliothèque dans un clip vide "clipvide". Le cha remove clip [ par BBFUNK01 ] Bonsoir à tous, j'ai créé un clip chargé avec attachemovie, le clip est donc chargé lorsqu'on clique sur un bouton dans le menu. Dans le clip chargé s Problème LoadMovie + Enabled [ par emizzzz ] Bonjour ! J'ai un petit soucis avec mon code et je n'arrive pas où je peux me tromper. J'aurais besoin donc d'un coup d'oeil nouveau pour me donner vo cd code de la route [ par khaaled88 ] svp, j'aimerais bien savoire comment à partir des questions,réponses,images et sons du code de la route pui-je faire un programme du code de la route.


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,967 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales