После некоторых проблем с удалением объектов я запустил простой тест:
- Создан простой класс со слабой ссылкой слушатель для Event.ENTER_FRAME.
- Добавлен вызов
trace("I Exist!")
для прослушиваемой функции.
- Создание единственного экземпляра с одной ссылкой в классе документа.
Это сработало, как и ожидалось - SWF-файл ничего не делал, кроме печати «Я существую!» каждый кадр на консоль. (В режиме отладки, конечно.)
То, что я сделал дальше, не сработало, как я ожидал:
Я установил единственную ссылку на объект, которая должна быть установлена на null
для события мыши, но сообщения от прослушивателя события указанного объекта все еще появлялись в консоли после запуска события мыши, и ссылка была установлена на null
- значит объект еще существовал!
Вызов System.gc()
в классе документа НЕМЕДЛЕННО остановил прослушиватель событий для печати дальнейших сообщений и, по-видимому, удалил элемент.
Исходя из того, что я понимаю, вызывать System.gc()
не рекомендуется, но, как видно из этого простого теста, сборщик мусора - большая НЕУДАЧА.
Я делаю что-то не так, пытаясь избавиться от объекта, или мне просто нужно звонить System.gc()
каждый раз, когда я хочу избавиться от объекта ..?
Редактировать: Вызов System.gc()
с неслабым слушателем также приводит к удалению объекта из памяти (?)