[Flash 2004 / AS2] Is delete this; mogelijk?

Pagina: 1
Acties:

  • hobbit_be
  • Registratie: November 2002
  • Laatst online: 04-07-2025
Hoi

ik ben een typische MX (AS1) gebruiker die zichzelf aan het omscholen is naar AS2. Zelf heb ik ervaring met Java/C++.

Nu ben ik echter veel functionaliteit gewend van AS1 dat ik best wel 'cool' vind en vooral: uiterst efficient. Ik look nu echter op iets aan dat zoveel code kost in AS2 dat ik me serieuze vragen begin te stellen met AS2 (behalve voor components en RIA stuff). Vooral het feit dat MM eigen code vaak gewoon AS1 bevat met allerlei 'hacks'.

Dit is het probleem:

Ik wil graag eenvoudig een een Google vraag kunnen stellen in flash: Ik gebruik daarvoor voorlopig de SOAP webservice in MX2004 maar daar komt vast ook nog een slimme getURL en wellicht een nog snellere PHP/ASP.Net tussen request door (eventueel met XMLSockets).

Zelf zie ik graag dit in code (toch in flash);

Flash ActionScript:
1
Google.ask("mag delete this; in actionscript2", __scoped_target_callback);

Google.ask is dus een static method dat vind ik best ok: er is maar 1 google en request zijn toch zowieso qeued. De vraag en issue zit bij de 'callback'.

in AS2 lijken callbacks (of event functions zoals ze beter genoemd worden imho) 'old skool' and not wanted: gebruik van de EventDispatcher is aan te raden als ik de documentatie doorneem. Maar dit resulteerd in zoveel new's, delete en tijdelijke objecten dat ik me eraan stoor en erger dat is ineens ook veel groter in code en geen static:

Flash ActionScript:
1
2
3
tGoogle = new GoogleQuestion("blabla");
tGoogle.addEventListener("onResult", Delegate.create(this, this.onResult))
tGoogle.doQuery();


dit laatste is groter EN vereist ook dat tGoogle daarna opgeruimd wordt en daarvoor moet je het ook weer bijhouden.

Een oplossing is dat het tGoogle Object zichzelf vernietigd nadat hij de callback heeft gedaan. Dit gebeurt op de interne callback in die classe:

Flash ActionScript:
1
2
3
4
5
private function onResult(aResult:Object)
{
     dispatchEvent("onResult", aResult);
     delete this;
}


maar nu weet ik eigenlijk niet of delete this ook wel degelijk 'werkt' wordt het object weldegelijk vernietigd zodat als ik duizenden queries doe het geheugen niet vol geraakt.

Ook tips om de allereerste optie te doen in AS2 lijkt me handig want ik krijg dan EventDispatcher na EventDispatcher...

Flash ActionScript:
1
2
Google.ask("mag delete this; in actionscript2", 
                        Delegate.create(this, this.onResult));


is wat ik wil zien maar vraag me dan ook ineens af - naarwaar gaat het geheugen van de Delegate?

[ Voor 3% gewijzigd door hobbit_be op 02-08-2005 12:09 ]