Цитата:
|
на все загрузчики были навешаны слушатели, и не weak, и все равно ГЦ их съедал.
|
Всё правильно, он не сьёдал бы их, только если бы слушатель принадлежал самому лоадеру и Вы бы повесили его слушатель на объект, который не подлежал бы сборке мусора.
А так вы навесили слушатель - т.е. добавили ссылку на себя в лоадер - как это должно помешать его сборке?
По порядку:

Код AS3:
private function stageMouseClickHandler(event:MouseEvent):void {
var a:A = new A();
addChild(a.vis);
}
1. Вы создали экземпляр A
2. Вы взяли у экземпляра A vis и добавили его в список отображения
3. Вы нигде не сохранили ссылку на сам экземпляр A (функция отработала - ссылок на экземпляр A не осталось, остался только vis в списке отображения)
Что должно получиться:
- ничего не мешает собрать GC экземпляр A
- GC не может собрать vis.

Код AS3:
public var vis:Sprite = new Sprite();
private const _SHAPE:Shape = new Shape();
function A() {
vis.graphics.beginFill(0xFF0000);
vis.graphics.drawRect(-25, -25, 50, 50);
vis.graphics.endFill();
_SHAPE.addEventListener(Event.ENTER_FRAME, entarFrameHandler);
}
3. Вы вешаете слушатель не на vis, а на _SHAPE
4. _SHAPE на сцену не добавляется
5. на _SHAPE ссылается экземпляр A, на который вы не сохранили никаких ссылок
Что должно произойти:
- Экземпляр _SHAPE должен быть снесён сборщиком мусора
Вывод: Хороший пример, демонстрирующи работу GC и никакой мистики!