|
|
|
|||||
Освобождение памяти
package { import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import flash.text.TextField; /** * ... * @author */ public class Main extends Sprite { public function Main():void { this.draw(); } /** * Отрисовка объектов */ public function draw():void { this._drawText(); this._drawButton(); } /** * Рисует текстовое поле */ private function _drawText():void { var _text:TextField = new TextField(); _text.text = _text.name; this.addChild(_text); } /** * Рисует кнопку */ private function _drawButton():void { var _button:Sprite = new Sprite(); _button.graphics.clear(); _button.graphics.beginFill(0xff0000, 1) _button.graphics.drawRect(0, 0, 100, 20); _button.addEventListener(MouseEvent.CLICK, this._onClick); _button.x = 200; _button.y = 200; this.addChild(_button); } /** * Клик по кнопке - удаление объектов и их отрисовка заново * @param event */ private function _onClick(event:Event):void { while (this.numChildren) { this.getChildAt(0).removeEventListener(MouseEvent.CLICK, this._onClick); this.removeChildAt(0); } this.draw(); } } } Но требуемый объем памяти увеличивается. Почему? От событий отписался. |
|
|||||
Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
|
Очевидно, GC не считает необходимым отвлекаться от пива и футбола по таким пустякам?
|
|
|||||
Попробуйте присвоить всем объектам null и вызвать после этого System.gc().
|
|
|||||
Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
|
Кстати, да.
null присвоить надо. Относительно System.gc() - в рантаймовой версии плеера все равно эта функция работать не будет. |
|
|||||
Цитата:
Цитата:
__________________
...вселенская грусть |
|
|||||
Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
|
Смысла нет, если она локальная.
Кстати, является ли локальным (т.е., существующим внутри функции класса) объект, если после помещения на сцену мы можем обращаться к его методам в другой функции, ссылку на объект в которую мы не передавали? Но это так, к слову. |
|
|||||
Дать знать GC, что можно удалять, если будет не null, то GC вообще никогда может не удалить ее.
Добавлено через 1 минуту P.S. Вы правы, только что прочел, что локальную, виноват. Когда переменная уходит из области видимости, то она сама удалится. |
|
|||||
память смотрю в Profiler/Memory у FD, с ней тогда ясно. Но закладка Live Objects Count показывает увеличение количества объектов TextField и Sprite с каждой перерисовкой - объясняется новой областью памяти?
trace(this.numChildren) всегда 2 Суть задачи перерисовать флешку с новыми входными данными. Подобную тему видел, но работает не очевидно. |
|
|||||
|
|
|||||
это равносильно, цикл работает.
|
Часовой пояс GMT +4, время: 17:16. |
|
« Предыдущая тема | Следующая тема » |
|
|