Flash 即使uiloader已卸载,EventListener仍处于活动状态

Flash 即使uiloader已卸载,EventListener仍处于活动状态,flash,caching,actionscript,event-listener,uiloader,Flash,Caching,Actionscript,Event Listener,Uiloader,我目前在一个父movieclip中使用三个uiloader,它加载三个其他swf文件。这些电影嘴唇中的每一个都有键盘事件,当敲击时会发出不同的声音 当我转到movieclip并返回到父级时,我遇到了一个问题,事件侦听器仍然处于活动状态。我一直在尝试不同的事情,比如从uiloader卸载swf文件,但事件仍然处于活动状态,即使在我失去焦点后也可以直接访问它 我很确定问题在于我的舞台上有事件监听器,但一旦退出swf文件,我真的不知道如何卸载它 任何帮助都将不胜感激。你说得对。键盘事件通常在stage

我目前在一个父movieclip中使用三个uiloader,它加载三个其他swf文件。这些电影嘴唇中的每一个都有键盘事件,当敲击时会发出不同的声音

当我转到movieclip并返回到父级时,我遇到了一个问题,事件侦听器仍然处于活动状态。我一直在尝试不同的事情,比如从uiloader卸载swf文件,但事件仍然处于活动状态,即使在我失去焦点后也可以直接访问它

我很确定问题在于我的舞台上有事件监听器,但一旦退出swf文件,我真的不知道如何卸载它


任何帮助都将不胜感激。

你说得对。键盘事件通常在stage(即stage.addEventListener(KeyboardEvent.KEY_UP,someFunction);)中注册,这意味着stage保存对movieclip的引用,防止它被垃圾收集,即使您尝试卸载它

有两种方法可以解决这个问题。您要么必须注销keyboardListener stage.removeEventListener(KeyboardEvent.KEY\u UP,someFunction);或者,您可以将侦听器注册为弱引用:

stage.addEventListener(KeyboardEvent.KEY\u UP,someFunction,false,0,true)


其中,最后一个参数(true)表示事件注册为弱引用。默认值为false。

弱引用究竟是如何工作的,我是否必须卸载swf文件才能真正收集它,或者我是否可以失去它的焦点?看起来这正是我所需要的,但我真的不知道如何管理它。如果使用弱引用,那么在删除swf后,应该无法获得更多的关键事件。但最正确的做法是在卸载swf之前调用removeEventListeners!可能在加载的swf中放置一个destroy()-方法来清理自身。我建议你这样做。非常感谢,你帮了我很大的忙D