|
|
|||||
Освобождение памяти
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() - в рантаймовой версии плеера все равно эта функция работать не будет. |
|
|||||
Цитата:
Цитата:
__________________
...вселенская грусть |
|
|||||
память смотрю в Profiler/Memory у FD, с ней тогда ясно. Но закладка Live Objects Count показывает увеличение количества объектов TextField и Sprite с каждой перерисовкой - объясняется новой областью памяти?
trace(this.numChildren) всегда 2 Суть задачи перерисовать флешку с новыми входными данными. Подобную тему видел, но работает не очевидно. |
|
|||||
|
|
|||||
это равносильно, цикл работает.
|
|
|||||
Цитата:
Когда Вы пишите new Object() - где-то выделяется кусочек памяти и в него записываются необходимые данные (описание нашего Object'а). И у нас не C++ чтобы иметь доступ к объектам. Мы можем иметь доступ только к ссылкам на объекты (переменным) когда Вы пишите var o:Object = new Object() - Вы проделываете 2 операции : 1) создаете объект 2) создете ссылку на объект когда вы пишите o = null - Вы просо говорите, что ссылка o уже не приведет нас ни к какому объекту. Как только ни одной ссылки не осталось - объект доступен для сборки gc. НО Объект от этого не удаляется - он просто доступен для удаления. Когда придет время, gc его удалит. По этому число объектов в профайлере растет
__________________
...вселенская грусть |
|
|||||
ясно, спс, будем ждать когда придет время
|
Часовой пояс GMT +4, время: 23:39. |
|
« Предыдущая тема | Следующая тема » |
|
|