【发布时间】:2012-04-11 22:22:38
【问题描述】:
我有一个自定义组件(非常复杂,所以我不能在这里发布任何代码,尽管这不重要),我可以添加到视图中。当从视图中删除组件或切换视图时,我会调用自己的 dispose 方法,该方法会删除剩余的 eventListener 并杀死一些引用,以便最终可以将组件清空并由 GC 收集。
在我将 Spark TextInput 添加到组件的 MXML 部分之前,所有这些都可以正常工作(我花了几个小时才找出阻止组件被收集的原因!),所以我发现 TextInput 以某种方式自动添加了一些事件监听器。
我的问题是这些听众是什么,或者还有什么我没有想到的?
任何帮助将不胜感激!
【问题讨论】:
-
您可以尝试使用
hasEventListener()方法来确定哪些侦听器没有被删除(如果有)。查看 SkinnableTextBase 的源代码,看看内部添加了哪些监听器。 -
非常感谢RIAstar。确实有两个未删除的侦听器(MouseEvent.MOUSE_DOWN 和 TouchInteractionEvent.TOUCH_INTERACTION_START)。我想知道为什么 Adobe 在添加它们时没有(至少)使用弱引用。无论如何,有没有一种快速的方法可以从我的组件中删除这些侦听器?我无法从我的组件中访问 TextBase 的侦听器函数,我想避免扩展它并制作我自己的 TextInput 只是为了覆盖然后能够访问这些侦听器函数以删除它们。
-
查看
styleChanged()方法:看起来如果您将TextInput 的interactionMode样式设置为InteractionMode.MOUSE,则会删除侦听器。 -
啊废话,完全没看到。按预期工作。 ;) 非常感谢!您可能想在此处添加您的 cmets 作为正式答案,以便我将其标记为已回答。
标签: actionscript-3 apache-flex mobile flex4 flex-spark