Проблема утечки флэш-памяти - PullRequest
1 голос
/ 10 февраля 2010

У меня проблема с утечкой памяти в приведенном ниже примере (вы можете скачать код по ссылке)

http://brandonmeyer.net/projects/SuperPanelDemo/SuperPanelDemo.html

Запуск в профилировщике: - Я пытаюсь создать новые панели, нажав кнопку «Добавить новую панель». Я выбираю вариант разрешить Закрыть (флажок).

(После создания нескольких панелей и закрытия этих панелей я обнаружил утечку памяти в классе SuperPanel)

Так что моя проблема в том, как устранить эту утечку памяти. Я попытался изменить необязательные параметры в addEventListener, но это не сработало. Может ли кто-нибудь предоставить мне решение

1 Ответ

1 голос
/ 10 февраля 2010

Я думаю, что ваша проблема связана с вашими привязками. BindingUtils.bindProperty дается ваш экземпляр panel, он пробует его на графе объектов и делает его неприменимым для сборки мусора.

bindProperty возвращает ChangeWatcher, который можно использовать для отмены регистрации привязки, когда вы закончите с ней. Примерно так:

var watchers : Array = [];

var panel:SuperPanel = new SuperPanel();
panel.width = 300;
panel.height = 200;
panel.minWidth = 200;
panel.minHeight = 100;

panel.title = "My Panel " + (panelContainer.numChildren + 1);
panel.addEventListener(CloseEvent.CLOSE, function(event:CloseEvent):void{
    for each(var watcher : ChangeWatcher in watchers) {
        watcher.unwatch();
    }

    event.target.parent.removeChild(event.target);
});

watchers.push(BindingUtils.bindProperty(panel, "allowDrag", allowDragCheck, "selected"));
watchers.push(BindingUtils.bindProperty(panel, "allowResize", allowResizeCheck, "selected"));
watchers.push(BindingUtils.bindProperty(panel, "allowClose", allowCloseCheck, "selected"));
watchers.push(BindingUtils.bindProperty(panel, "allowMaximize", allowMaxCheck, "selected"));
watchers.push(BindingUtils.bindProperty(panel, "allowMinimize", allowMinCheck, "selected"));

panelContainer.addChild(panel);

Кроме того, вы не переопределили событие clone в SuperPanelEvent, которое позже вызовет проблемы. См. Этот вопрос для получения более подробной информации .

...