Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 Flex,删除事件侦听器和绑定设置器_Actionscript 3_Apache Flex_Flex3 - Fatal编程技术网

Actionscript 3 Flex,删除事件侦听器和绑定设置器

Actionscript 3 Flex,删除事件侦听器和绑定设置器,actionscript-3,apache-flex,flex3,Actionscript 3,Apache Flex,Flex3,我有一个大型应用程序,它在Flex3.6中内置了复杂的UI。有很多嵌套组件,其中大多数都有事件侦听器或绑定设置器。结构类似于: - Client View - Portfolio View - Personal data - etc. etc. - Manager view - etc. etc. 有时我不得不破坏客户端视图来重新初始化它;我所做的是把它从容器中取出;但是内存似乎没有被正确地垃圾收集。问题在于事件侦听器和数

我有一个大型应用程序,它在Flex3.6中内置了复杂的UI。有很多嵌套组件,其中大多数都有事件侦听器或绑定设置器。结构类似于:

- Client View
         - Portfolio View
         - Personal data
         - etc. etc.
- Manager view
         - etc. etc.
有时我不得不破坏客户端视图来重新初始化它;我所做的是把它从容器中取出;但是内存似乎没有被正确地垃圾收集。问题在于事件侦听器和数据绑定的存在

阅读书籍和论坛,我发现管理这种情况的最佳方法是删除对象销毁的数据绑定和事件侦听器。但我怎么能做到呢?谁告诉客户端视图层次结构的最后一个子级它已被删除

我已经通过AddedStatage和removedFromStage事件处理程序实现了它——它似乎可以工作,但这是一种变通方法;此事件会被调用很多时间,这会减慢渲染速度


所以我的问题是:我认为这个问题很常见,有更好的解决办法吗

为什么您认为根据组件在舞台上的外观来处理和重新激活组件是一种解决方法?像这样做是很常见的,我个人认为没有什么特别的理由不这样做

虽然我只从事移动项目,但这基本上与我处理组件停用和重新激活的方法完全相同。一旦从阶段中删除,所有事件处理程序都将被删除,并在组件再次添加时再次添加。
除此之外,我还有一个额外的方法可以完全处理组件,因此首先删除事件监听器,删除对对象的所有引用,最后将其置空。

问题是,这些事件会被触发很多次,尤其是在组件位于视图堆栈内的情况下。我发现很奇怪,在每一个指南、手册、论坛等中,每个人都告诉我删除事件侦听器,但没有人说什么时候做。事实上,我不是唯一一个使用此解决方案的人,这让我很高兴。当您不再需要事件侦听器时,何时删除事件侦听器相当简单。例如,AddedStatage侦听器可以在事件触发后立即删除,请记住,如果您想再次使用该对象,请再次添加该侦听器,这样事件将只触发一次,正如它应该的那样。问题是它调用addtostage和removefrom stage,因此我无法删除addtostage事件。我发现,当显示对象从其父对象中移除并放入变量时,就会发生这种行为,这在视图堆栈操作中发生。但是,如果这是常见的工作方式,我只需要重新思考一下我们在绑定设置器中所做的工作。你说不能删除AddedStatage侦听器是什么意思?您有一个组件X,它有一个AddedStatage侦听器,可以触发AddedStatageHandler。在该事件处理程序中,只需删除AddedStategListener即可。这同样适用于removedFromStage侦听器。在处理程序中删除它,并在需要时再次添加AddedStatage处理程序。如果flex调用removefromstage并在调用addtostage后,它会在视图堆栈和其他情况下执行此操作,但我已删除它,我仍然没有侦听器。