![]() |
Можно ли так удалять объекты?
Всем добрый день.
есть вспомогательная переменная Код AS3:
Код AS3:
Код AS3:
Код AS3:
Спасибо!!!! |
Код AS3:
Зачем удалять по свойству name, если можно по прямой ссылке? |
Цитата:
Добавлено через 31 минуту Я тут вот что в мануле нашла: Цитата:
Какой тогда выход? |
Цитата:
Цитата:
Иногда лучше чего-то не сделать и огрести (чтобы понять), чем полжизни копипастить "10 волшебных строчек", потому что так ваши деды и прадеды делали - а почему и зачем - никто не помнит. А теперь без философии: - на один и тот же объект может быть несколько ссылок с разных частей программы. Если вы одну занулите - это же не повод для флешплеера ломать работу всем остальным ссылающимся. Поэтому удаляет сборщик мусора, когда не ссылается никто - pPic = null ничего не удаляет - оно просто убивает ссылку, и теперь на этот объект эта часть системы объект не держит в памяти - что делают другие части - это их проблемы. - нахождение отбекта в списке отображение тоже считается ссылкой на него и мешает сборке (оно было бы странно, если бы объект исчезал с экрана без вызова removeChild, а просто так, потому что GC до него дополз) Т.е. правила просты: Есть часть системы - нужен объект - сохранеям ссылку - не нужен - убираем Нужно убрать с экрана - убираем (это уже ресурсы экономит), нужно при этом ссылку оставить, чтобы потом его добавить - оставляем. Ббольше не нужен части кода, но должен остаться на экране? - Просто занулите ссылку - кому надо удалят его с экрана. И не морочим себе голову написанием чудо-функций "удалятелей" - это не C++. Когда объект не будет никому требоваться - GC его сам удалит. А если он кому-то требуется - как его можно удалять? Есть конечно более тонкие нюансы, когда надо знать время "становления объекта ненужным", например при использовании пулов и подписке-отписке листенеров в объекте на "не принадлежащий" ему объект, но это всё потом |
Цитата:
Код AS3:
Цитата:
Добавлено через 17 минут В общем я попробовала - создала глобальную переменную pPic. Удаляла ее как положено (т.е. со сцены и обнуление) и все равно загрузка прцессора та же((( |
Цитата:
В AS3 переменные/поля сами не создаются (ну разве что на динамических объектах можно создать) и за пределами функции недоступны Это не "программа не знает об объекте", это "программа не знает такого поля", не то что объекта, который там должен был храниться. |
Цитата:
И самое главное - даже при удалении со сцены и обнулении загрузка не уменьшилась. Задача то в этом. |
Цитата:
<найти этот объект в массиве> removeChild(array[i]); array[i]=null; <удалить объект из массива> |
Цитата:
Код AS3:
Код AS3:
Тогда давайте по-порядку: - она вообще увеличивается при добавлении этого "спрайта"? - он сам подписывается н внешние события, таймеры или ENTER_FRAME? - что вообще есть в этом спрайте? (кстати, GC может снести объект с работающим ENTER_FRAME, если на объект нет ссылок и он снесён со сцены, но ENTER_FRAME будет тикать всё время ожидания GC) |
Цитата:
да, сам спрайт подписывается, но это все вроде удаляется, уже проверяла. вот тут подробнее про класс, если Вас не затруднит - посмотрите : http://www.flasher.ru/forum/showthread.php?t=179463 |
| Часовой пояс GMT +4, время: 20:35. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.