Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 05.10.2015, 14:50
Quadro9 вне форума Посмотреть профиль Отправить личное сообщение для Quadro9 Найти все сообщения от Quadro9
  № 1  
Ответить с цитированием
Quadro9

Регистрация: Sep 2015
Сообщений: 20
По умолчанию Корректное удаление объекта

допустим у меня в векторе хранятся объекты которые я хочу удалить.
я делаю
Код AS3:
var layer:Layer;
for (var i:int = _layers.length-1; i >= 0; i--)
{
            layer = _layers[i];
            if (layer.hasEventListener(StateEvent.CHANGE_STATE))
            {
                layer.removeEventListener(StateEvent.CHANGE_STATE, dispatchEvent);
            }
            layer.dispose();
            _layers.pop();
}
при условии что dispose() этих объектов написан правильно, этого достаточно?

Теперь сам dispose, если в объекте который я удаляю есть массив, то после удаления всех элементов из него, нужно занулить сам массив? Что еще нужно занулять? Все объекты который созданы через new?
А ссылки на объекты которые были переданы из вне? Number'ы и Boolean'ы занулять не нужно?
Код AS3:
public function dispose():void
    {
        for (var i:int = _items.length-1; i >= 0; i--)
        {
            _items[i].dispose();
            _items.pop();
        }
        _items = null;
        _rect = null;
        _model = null;
    }
Поправьте или подтвердите пожалуйста мои предположения

Старый 05.10.2015, 14:56
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 2  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Код AS3:
if (layer.hasEventListener(StateEvent.CHANGE_STATE))
Этой проверки делать не нужно, removeEventListener корректно отработает, если слушатель не присоединен.
Код AS3:
for (var i:int = _items.length-1; i >= 0; i--)
        {
            _items[i].dispose();
            _items.pop();
        }
Замените на for each; и pop() делать не нужно, так как после цикла идет
Код AS3:
_items = null;
Аналогичная правка к первому циклу.

Простые типы занулять не нужно. Кроме того, если уничтожается полностью весь контейнер со всем его содержимым, достаточно убрать только слушатели событий, которые МОГУТ произойти (enterFrame, timerTick и тому подобные), — чтобы они не срабатывали после удаления, но до того, как GC все заберет. GC сам уничтожит все, что надо. Другими словами, нужно отрубить один раз всю ветку дерева, чем ломать ее по чуть-чуть много раз, чтобы в итоге прийти к тому же.
Исключение из правил - всякие XML, BitmapData, Socket и тому подобное, у чего нужно вызывать dispose/disconnect руками.
__________________
тут я

Старый 05.10.2015, 16:26
Quadro9 вне форума Посмотреть профиль Отправить личное сообщение для Quadro9 Найти все сообщения от Quadro9
  № 3  
Ответить с цитированием
Quadro9

Регистрация: Sep 2015
Сообщений: 20
а String'и нужно занулять или они тоже простые типы?

Старый 05.10.2015, 16:41
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 4  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Тоже простой.
__________________
тут я

Создать новую тему Ответ Часовой пояс GMT +4, время: 04:14.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 04:14.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.