Удалить сам класс AS3 - PullRequest
       2

Удалить сам класс AS3

0 голосов
/ 22 октября 2011

У меня есть такой класс as3

package  {

import Global;
import flash.display.MovieClip;
import flash.events.*;
public class Alert extends MovieClip {

    public function Alert(alertTitle:String, alertText:String, alertButton:String = "OK") {
        alert_title.text = alertTitle;
        alert_text.text = alertText;
        alert_button.button_text.text = alertButton;            
        this.x = Global.stage.stageWidth/2;
        this.y = Global.stage.stageHeight/2;
        Global.stage.addChild(this);
        alert_button.addEventListener(MouseEvent.CLICK, Close);
    }

    public function Close(e:MouseEvent){
        this.parent.removeChild(this);
        alert_button.removeEventListener(MouseEvent.CLICK, Close);
    }

}

}

Я использую функцию Close (), чтобы удалить сам класс, но я заметил, что он не освобождает память.Есть ли способ полностью удалить и освободить использованную память?

Извините за мой плохой английский.

Ответы [ 5 ]

2 голосов
/ 22 октября 2011

Это управление памятью, поэтому объекты не будут освобождены немедленно.После запуска сборщика мусора, если ничего не ссылается на предупреждение, оно будет освобождено.

1 голос
/ 22 октября 2011

Flash Player использует сборщик мусора для освобождения памяти, используемой объектами.

https://www.adobe.com/devnet/flashplayer/articles/garbage_collection.html

Как правило, удаление объекта не сразу отражается при проверке памяти.Среда выполнения Flash Player определит подходящее время для освобождения.

0 голосов
/ 25 октября 2011

Сначала вы должны убедиться, что ничто не связано с этим классом после того, как вы нажмете на закрытие

Что касается сбора мусора, вы можете использовать System.gc () для проигрывателя отладки или для приложения AIR, вот документация для него http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/system/System.html#gc%28%29

Вы также можете использовать этот код для принудительного сбора мусора

try {
    new LocalConnection().connect('foo');
    new LocalConnection().connect('foo');
} catch (e:*) {}
// the GC will perform a full mark/sweep on the second call.

Подробнее об этом http://gskinner.com/blog/archives/2006/08/as3_resource_ma_2.html

0 голосов
/ 22 октября 2011

Если вы расширяете MovieClip, вы должны для тестов добавить несколько больших bitmapData внутрь, когда GC удалит объект. Вы наверняка увидите несколько или более килобайт.

0 голосов
/ 22 октября 2011

Вы также пропали без вести.

public function Close(e:MouseEvent){
  this.parent.removeChild(this);
  alert_button.removeEventListener(MouseEvent.CLICK, Close);
  alert_button=null;
}

Это может не помочь мгновенному перераспределению памяти, которое вы ищете, но позволит движку GC быстрее его найти.

Еще одна мысль здесь
Этот класс оповещений у вас очень маленький, и если у вас на сцене не будет нескольких сотен из них, вы, вероятно, не заметите резкого изменения памяти вообще

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...