我在删除在运行时创建的组件时遇到问题。请帮帮我。
继承我创建组件的代码
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组件)后,内存使用情况仍然存在。删除后如何删除组件的内存分配?
答案 0 :(得分:1)
您需要删除事件侦听器,或者可以使用弱引用添加事件侦听器:
oh.addEventListener(KeyboardEvent.KEY_DOWN,deleteSel,false,0,true)
我不建议调用删除。调用removeAllChildren应该处理它。虽然,通过查看您的代码,可能也没有必要。删除事件监听器后,应该清理它。
答案 1 :(得分:0)
delete仅适用于动态对象,并且不会产生影响。我个人建议明确删除事件监听器:
event.target.removeEventListener(KeyboardEvent.KEY_DOWN,deleteSel);
以及使用Osman建议的弱参考。