Flex:内存问题

时间:2009-03-31 08:05:43

标签: flex

我在删除在运行时创建的组件时遇到问题。请帮帮我。

继承我创建组件的代码

var oh: ObjectHandles = new ObjectHandles;              
    oh.x =  event.localX-xOff;
    oh.y = event.localY-yOff;
    Canvas(event.target).addChild(oh);

    oh.addEventListener(KeyboardEvent.KEY_DOWN,deleteSel);
    oh.width=270;
    oh.height=200;
    oh.mouseChildren = true; 
    var vdo:FXVideo = new FXVideo;
    vdo.source = "http://thehq.tv/wp-content/uploads/flv/funny-people-trailer.flv";                 
    vdo.percentHeight = 100;
    vdo.percentWidth = 100;
    oh.addChild(vdo);  

键盘删除事件中的代码

     private function deleteSel(event:KeyboardEvent):void
     {
            if(event.charCode == 127) 
            {
               FXVideo(ObjectHandles(event.target).getChildAt(0)).stop();
               delete(ObjectHandles(event.target).getChildAt(0));

               ObjectHandles(event.target).removeAllChildren();
               ObjectHandles(event.target).parent.removeChild(ObjectHandles(event.target));
               delete ObjectHandles(event.target);                      
             }
      }

删除对象句柄组件(内部是FxVideo组件)后,内存使用情况仍然存在。删除后如何删除组件的内存分配?

2 个答案:

答案 0 :(得分:1)

您需要删除事件侦听器,或者可以使用弱引用添加事件侦听器:

oh.addEventListener(KeyboardEvent.KEY_DOWN,deleteSel,false,0,true)

我不建议调用删除。调用removeAllChildren应该处理它。虽然,通过查看您的代码,可能也没有必要。删除事件监听器后,应该清理它。

答案 1 :(得分:0)

delete仅适用于动态对象,并且不会产生影响。我个人建议明确删除事件监听器:

event.target.removeEventListener(KeyboardEvent.KEY_DOWN,deleteSel);

以及使用Osman建议的弱参考。