Показать сообщение отдельно
Старый 02.04.2013, 21:34   #10
YellowAfterlife
ПроЭктировщик
 
Аватар для YellowAfterlife
 
Регистрация: 19.02.2011
Сообщений: 134
Написано 81 полезных сообщений
(для 219 пользователей)
Ответ: Отрицательные моменты в Monkey

Сообщение от 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 модифицировать сборщик мусора нельзя вовсе.

В общем, нужно или ждать пока разработчики добавят достойный сборщик мусора, или использовать текущий "полу-ручной" метод управления памятью.
__________________

Мой сайт-блог. Игры, обновления, примеры для Haxe, JavaScript(+HTML5), GameMaker, Love2d...
(Offline)
 
Ответить с цитированием