Ну, независимо от того, что говорят некоторые блоги, вы должны использовать слабые ссылки только тогда, когда это имеет смысл. Не используйте его, если вам нужно сохранить объект в памяти. Тем не менее, я думаю, что ваш пример немного странный, потому что вы, вероятно, не должны создавать такой анонимный объект. Ради примера сборки мусора это хорошо, но, как реальный код проекта, вам, вероятно, следует пересмотреть.

имаю, как работают слабые ссылки, но я немного озадачен тем, как они используются в обработчиках событий Actionscript. Рассмотрим пример ниже:

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");        
  }        
}

Теперь, поскольку существует только слабая ссылка на Foo, не будет ли прослушиватель событий Foo собираться мусором, если и когда сборщик мусора будет работать и код перестанет работать так, как ожидалось?

Сценарий прослушивания слабых событий предписан только для методов прослушивания событий в том же классе, что и ниже?

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");        
   }
 }

В этом сценарии помогают слабые слушатели событий?

Если у объекта Rectangle нет других ссылок, то он является кандидатом на сборку мусора, но поскольку в объекте есть прослушиватель событий, диспетчер событий содержит ссылку на объект, даже если других ссылок на объект нет ( кроме того, который проводится слушателем события). Следовательно, это предотвращает сбор мусора. Это причина, почему слабые слушатели событий предписаны? Является ли флэш-плеер настолько наивным, что он не может понять, что прослушиватель событий определен внутри одного и того же объекта?

Ответы на вопрос(1)

Ваш ответ на вопрос