Сообщение от devolonter
<snip>
|
Проблемы сборщика мусора это проблемы сборщика мусора.
А если он не проверяет связи между переменными, то он уже не совсем то и сборщик.
Приведенный метод вроде бы и работает, но на самом деле порождает еще большее количество проблем.
Рассмотрим, к примеру, такой случай:
Есть некий глобальный
assets, в котором хранятся загруженные ресурсы (дабы память не переводить дубликатами тех же изображений).
Мы загружаем на старте игры в него изображения:
assets.circle_png = LoadImage("circle.png")
assets.dog_png = LoadImage("dog.png")
' (и так далее)
Так же допустим, что у нас есть некий класс объекта, отображающего изображение из своей переменной (как PictureBox в NET/VCL/...).
И мы делаем подобную манипуляцию:
' Загружаем изображение в элемент 1:
picture1.image = assets.circle_png
' Загружаем изображение в элемент 2:
picture2.image = assets.circle_png
' После, к примеру, нам нужно выгрузить изображение
' из элемента 1. Может быть это деструктор, может
' нам просто нужно убрать из него изображение...
picture1.image = null
' И тут программе приходит конец: мы только что
' успешно выгрузили из памяти изображение, которое
' еще используется в элементе 2.
Конечно же, можно было бы сделать подсчет ссылок, и вызывать деструктор при потере последней ссылки на экземпляр, но это возвращает к ранее упомянутой проблеме того, что в JS и AS модифицировать сборщик мусора нельзя вовсе.
В общем, нужно или ждать пока разработчики добавят достойный сборщик мусора, или использовать текущий "полу-ручной" метод управления памятью.