我有一个大的应用程序,有一个复杂的UI(内置于Flex 3.6)。有很多嵌套的组件,其中大多数都有事件侦听器或绑定设置器。结构类似于:
- Client View
- Portfolio View
- Personal data
- etc. etc.
- Manager view
- etc. etc.
有时我必须破坏客户端视图来重新初始化它;我要做的就是把它从容器里拿出来但似乎内存没有得到正确的垃圾收集(问题是存在事件侦听器和数据绑定)。
阅读书籍和论坛,我发现处理这种情况的最佳方法是删除对象销毁的数据绑定和事件侦听器。但我如何才能做到这一点呢?谁来告诉客户端视图层次结构的最后一个子对象它已经被删除了呢?
我已经通过“addedToStage”和“removedFromStage”事件处理程序实现了它--它似乎可以工作,但这是一种变通方法;该事件被调用了很多次,这会降低渲染速度。
所以我的问题是:我认为这个问题很常见,是否有更好的解决方案?
1条答案
按热度按时间qnzebej01#
为什么您认为根据组件在舞台上的外观来处理和重新激活组件是一种变通方法?这样做很常见,就我个人而言,我看不出有什么特别的理由不这样做。
虽然我只处理移动的项目,但这基本上与我处理组件的停用和重新激活的方法完全相同。一旦从阶段中删除,所有的事件处理程序都会被删除,并在组件再次添加时再次添加。除此之外,我还有一个完全释放组件的方法,因此首先删除事件侦听器,删除对对象的任何引用,最后将其置空。