Clarificaciones sobre referencias débiles en los oyentes actionscript

Entiendo cómo funcionan las referencias débiles, pero estoy un poco confundido con respecto a su uso en los oyentes de eventos actionscript. Considere el siguiente ejemplo:

public class Rectangle extends MovieClip {
  public function Rectangle() {
    var screen:Shape=new Shape();
    screen.addEventListener(MouseEvent.MOUSE_OUT, new Foo().listen, false, 0, true);
    addChild(screen);
  }
}

public class Foo extends MovieClip {
  public function listen(e:MouseEvent):void {
    trace("tracing");        
  }        
}

Ahora, dado que solo hay una referencia débil a Foo, ¿no se recolectaría basura del oyente de eventos Foo si y cuando el recolector de basura se ejecuta y el código deja de funcionar como se esperaba?

¿Se prescribe el escenario de escucha de eventos débiles solo para los métodos de escucha de eventos dentro de la misma clase que a continuación?

public class Rectangle extends MovieClip {
  public function Rectangle() {
    var screen:Shape=new Shape();
    screen..addEventListener(MouseEvent.MOUSE_OUT, listen, false, 0, true);
    addChild(screen);
  }

   public function listen(e:MouseEvent):void {
    trace("tracing");        
   }
 }

En el escenario anterior, ¿es así como ayudan los oyentes de eventos débiles?

Si el objeto Rectangle no tiene otras referencias, entonces es un candidato para la recolección de basura, pero dado que hay un detector de eventos dentro del objeto, el despachador de eventos tiene una referencia al objeto, aunque no haya otras referencias al objeto (distinto del que tiene el oyente del evento). Por lo tanto, se evita que se recoja la basura. ¿Es esta la razón por la cual se prescriben oyentes de eventos débiles? ¿El reproductor Flash es tan ingenuo que no puede darse cuenta de que el detector de eventos está definido dentro del mismo objeto?

Respuestas a la pregunta(1)

Su respuesta a la pregunta