![]() |
Сборщик мусора. Удаляется объект, который в дисплей листе.
Привет. Заголовок немного желтоват. На самом деле код выглядит так:
Код AS3:
|
Ну так все правильно. После вот этого:
Код AS3:
|
Но если он его удалит, значит он должен удалить все его поля, в том числе и vis. Т.е. память, занимаемая объектами должна освободиться. Но vis на месте и я могу обращаться к нему. А что если позже что-то перезапишется на эту память?
|
Не путайте ссылку и значение. Ссылка будет удалена, а объект останется, так как на него есть другая ссылка — в контейнере.
Добавлено через 7 минут Код AS3:
new Sprite(); — вот собственно "сам" спрайт, создаваемый где-то в памяти. Где — сохраняется в переменной. Или не сохраняется явно, а только во внутреннем хэше контейнера: Код AS3:
|
Wolsh, не понял. Если срабатывает ГЦ, то он именно удаляет объекты. Вот еще пример.
Код AS3:
|
Цитата:
Объект - это кусок памяти, в котором лежат: - вспомогательная информация - ссылки на другие объекты (физически 4 байта) - примитивные типы (int, Number) - физически 4, 8 байт И вот это всё лежит в линеечку (для одного объекта) Ссылки ссылаются на другие объекты. Т.е. удалить объект - это удалить как раз ссылки на другие и примитивные значения. Объекты и их ссылки представляют собой не _дерево_, а _граф_ Здесь нельзя просто взять и удалить вместе с объектом те, на которые он ссылается. На эти ссылочные объекты может ссылаться кто-то ещё. По поводу примера кода - не смотрел ещё, вообще странно. |
Цитата:
Пример, да, странный. У меня еще парочка необъяснимых имеется. |
Пример не странный, пример реальный. Я впервые столкнулся с таким удалением, когда делал игрушку, которая пачкой loader'ов загружала множество кусочков карты по 100 на 100 пикселей. Так вот я просто создавал в теле функции loader'ы и сразу кидал на сцену, нигде не хранил. И на некоторых компьютерах я увидел, что объекты лоадера ГЦ съедает даже еще до того, как картинка загрузилась. Причем, не очень уже хорошо помню, давно это было, но уверен, что на все загрузчики были навешаны слушатели, и не weak, и все равно ГЦ их съедал. Решил проблему хранением массива этих загрузчиков в классе, пока они все не загрузились.
|
Цитата:
А так вы навесили слушатель - т.е. добавили ссылку на себя в лоадер - как это должно помешать его сборке? По порядку: Код AS3:
2. Вы взяли у экземпляра A vis и добавили его в список отображения 3. Вы нигде не сохранили ссылку на сам экземпляр A (функция отработала - ссылок на экземпляр A не осталось, остался только vis в списке отображения) Что должно получиться: - ничего не мешает собрать GC экземпляр A - GC не может собрать vis. Код AS3:
4. _SHAPE на сцену не добавляется 5. на _SHAPE ссылается экземпляр A, на который вы не сохранили никаких ссылок Что должно произойти: - Экземпляр _SHAPE должен быть снесён сборщиком мусора Вывод: Хороший пример, демонстрирующи работу GC и никакой мистики! |
Да, хороший пример, в мемориз однозначно.
|
| Часовой пояс GMT +4, время: 15:08. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.