hay algunas referencias en la web a la ejecución de los temporizadores no se recoge la basura, e.g.:
Para que quede claro: incluso si no tiene referencias a un temporizador, siempre como el temporizador está en marcha , no será basura recolectada (piense en como si el tiempo de ejecución guardara una referencia a los temporizadores en ejecución).
por Arno Gourdol del AIR Adobe Equipo
pero no he sido capaz de encontrar una fuente autorizada.
Probablemente sea mejor no confiar en este comportamiento especial y en su lugar hacer de timer
una variable de nivel de clase.
Las respuestas que sugieren que los detectores de eventos evitan que el temporizador sea recogido son incorrectas. La referencia es desde el temporizador hasta la función del oyente (onTimerComplete
), de modo que si el temporizador es alcanzable, entonces la función del oyente no será recolectada como basura, pero no viceversa. Esto se puede probar fácilmente:
<?xml version="1.0" encoding="utf-8"?>
<s:Application
xmlns:s="library://ns.adobe.com/flex/spark"
creationComplete="application1_creationCompleteHandler(event)">
<fx:Script>
<![CDATA[
private var _gcTimer:Timer;
protected function application1_creationCompleteHandler(event:FlexEvent):void {
var timer:Timer = new Timer(30, 4);
timer.addEventListener(TimerEvent.TIMER, onTimer, false, 0, true);
var sprite:Sprite = new Sprite();
sprite.addEventListener(Event.ENTER_FRAME, onSprite, false, 0, true);
_gcTimer = new Timer(59, 1);
_gcTimer.addEventListener(TimerEvent.TIMER, garbageCollect);
timer.start();
_gcTimer.start();
}
private function onTimer(event:TimerEvent):void {
trace("timer");
}
private function onSprite(event:Event):void {
trace("sprite");
}
]]>
</fx:Script>
</s:Application>
de salida:
sprites
temporizador
sprites
temporizador
Recogida de la basura
temporizador
temporizador
Mis co ncern es si la demora en el temporizador es demasiado larga, digamos miles de segundos si existe la posibilidad de que el temporizador se acumule y el onTimerComplete nunca se llame. –
no debe ser GCed hasta que se elimine el detector de eventos. –
¿Estás seguro de eso? Este artículo: http://gingerbinger.com/2010/07/actionscript-3-0-events-the-myth-of-useweakreference/ afirma que los oyentes no evitan que los despachadores reciban el servicio de GC. –