闪存泄漏问题

时间:2010-02-10 08:10:15

标签: flash memory memory-leaks

我在下面的例子中遇到了内存泄漏问题(你可以从链接下载代码)

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

在Profiler中运行: - 我想要做的是通过选择添加新面板按钮创建新面板。 我选择选项允许关闭(复选框)。

(创建几个面板并关闭这些面板后,我发现SuperPanel类存在内存泄漏)

所以我的问题是如何解决这个内存泄漏问题。我尝试通过更改addEventListener中的可选参数,但这不起作用。有人能为我提供解决方案

1 个答案:

答案 0 :(得分:1)

我认为您的问题与您的绑定有关。 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事件,这会导致您稍后出现问题。 See this question for more details