Я понимаю, как работают слабые ссылки, но я немного озадачен тем, как они используются в обработчиках событий 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 не имеет других ссылок, он является кандидатом на сборку мусора, но поскольку в объекте есть прослушиватель событий, диспетчер событий содержит ссылку на объект, даже если других ссылок нетк объекту (кроме того, который удерживается слушателем события).Следовательно, это предотвращает сбор мусора.Это причина, почему слабые слушатели событий предписаны?Флэш-плеер настолько наивен, что не может понять, что прослушиватель событий определен в одном и том же объекте?