Просмотр полной версии : "правильное" уничтожение экземпляра класса
Есть визуальный класс, который делает некоторую работу, по окончании которой его нужно удалить. ссылка на экземпляр созданного класса хранится как свойство экземпляра класса "менеджера" (может сложно выражаюсь). Удаляю следующим образом:
1. removeChild
2. удаляю все события связанные с экз. визуального класса (или проще использовать useWeakRefence = true)
3. делаю свойство экземпляра класса "менеджера" = null
Все ли верно? Удалит ли после этих событий "сборщик мусора" ненужный визуальный класс в памяти?
C уважением.
ramshteks
01.07.2008, 18:07
думаю первое нужно сделать последним... если уж на то пошло)
может я ошибаюсь)
может я ошибаюсь)
Ошибаетесь.
firsoff, примерного кода отсюда не видно, а по терминологии ясности нет.
package
{
import flash.display.Sprite;
import flash.events.Event;
public class Master extends Sprite
{
private var _slave:Slave;
// CONSTRUCTOR
// КЛасс хозяин
public function Master()
{
_slave = new Slave();
// используем мягкие ссылки
_slave.addEventListener(Event.ADDED_TO_STAGE, handleAdded, false, 0, true);
addChild(_slave);
someWork();
// удаление из памяти
removeChild(_slave);
_slave = null;
// ну все сборщик милости просим (вызываем известный хак для GarbageCollector)
};
private function someWork():void
{
/*
* какая то работа с _slave
* */
};
private function handleAdded(event:Event):void
{
// обработчик просто для примера
};
};
public class Slave extends Sprite
{
// CONSTRUCTOR
public function Slave()
{
// визуальный класс
};
};
};
Проблема в том что "slave" классов визуальных много, и в какой то момент их надо все удалит и пересоздать с новым контентом и так много раз, и мне хочется чтобы ненужные экземпляры точно удалялись сборщиком а не висели мертвым грузом.
package
{
import flash.display.Sprite;
import flash.events.Event;
public class Master extends Sprite
{
private var _slave:Slave;
// CONSTRUCTOR
// КЛасс хозяин
public function Master()
{
_slave = new Slave();
// используем мягкие ссылки
_slave.addEventListener(Event.ADDED_TO_STAGE, handleAdded, false, 0, true);
addChild(_slave);
someWork();
// удаление из памяти
removeChild(_slave);
_slave = null;
// ну все сборщик милости просим (вызываем известный хак для GarbageCollector)
};
private function someWork():void
{
/*
* какая то работа с _slave
* */
};
private function handleAdded(event:Event):void
{
// обработчик просто для примера
};
};
public class Slave extends Sprite
{
// CONSTRUCTOR
public function Slave()
{
// визуальный класс
};
};
};
Проблема в том что "slave" классов визуальных много, и в какой то момент их надо все удалит и пересоздать с новым контентом и так много раз, и мне хочется чтобы ненужные экземпляры точно удалялись сборщиком а не висели мертвым грузом.
Хак использовать не надо. Слабые ссылки тоже, надо отписываться от событий. И проблем не будет.
меня больше интересует если _slave = null не сделать, то экземпляр класса останется в памяти? ведь получается на него остается ссылка в экз. класса Master, иными словами присвоение null обязательно?
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.