flex的一个疑问。

missj 2010-04-11 03:40:23
flex的对象销毁机制,基本上和java差不多,这里有一个疑问,希望高手详尽解答一下。
我们自定义一个组件b,并给该组件添加一个事件,b.addEventListener("sendData",onSendData);
如果,我不调用b.removeEventListener("sendData");垃圾回收器会不会在b没有任何对象引用的时候回收该对象。
...全文
2349 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
不做懦夫 2010-10-28
  • 打赏
  • 举报
回复
不会!!
les5332295 2010-10-16
  • 打赏
  • 举报
回复
注册的事件如果没有被移除不影响自定义的强行回收机制,但有可能会影响正常的回收机制,所以最好是做到注册的事件监听器都要记得移除干净。
les5332295 2010-10-16
  • 打赏
  • 举报
回复
注册的事件如果没有被移除不影响自定义的强行回收机制,但有可能会影响正常的回收机制,所以最好是做到注册的事件监听器都要记得移除干净。
a120255857 2010-07-02
  • 打赏
  • 举报
回复
ding`````````````````````````````
missj 2010-04-11
  • 打赏
  • 举报
回复
其实,我是在想事件和组件之间到底有没有关系,比如他们是不是依赖,或者组合,聚集之类的关系。有时候我在想,或许他们之间根本就不存在这些关系。是两个完全独立的个体。就好像表与表之间的多对多关系,通过设计可以构成两个一对多关系一样。所以组件的销毁是否可以和事件毫无关系呢。
missj 2010-04-11
  • 打赏
  • 举报
回复
flex默认的方式就是强引用,如你所说,事件处理方式,并不是什么好方式,这样说来,利用函数处理问题,可能更好点。为了证实这一点,你有没有比较权威的资料,或者证明方式,我想再具体了解一下这个问题的原理。也就是说是否有事件机制影响组件回收的说话
PIGer920 2010-04-11
  • 打赏
  • 举报
回复
你的监听器如果是强引用并且没有关闭,那么我认为b是不会被回收的。参见子对象不会被删除会导致父对象不会被删除。
我想这个不管在哪个语言里都应该是这样的。
missj 2010-04-11
  • 打赏
  • 举报
回复
其实我问,事件监听器时候会影响调用者b的回收
missj 2010-04-11
  • 打赏
  • 举报
回复
那么就如我上面的例子,b添加的应该是一个默认的强引用了,那么b是不是就一直常驻内存呢。
PIGer920 2010-04-11
  • 打赏
  • 举报
回复
噢 你其实想问的是当组件b被自动回收时,附加的监听器是否被一同回收是把?

强引用的监听器不会被回收的,使用了强引用的也不应该被回收。
子对象不会被删除会导致父对象不会被删除。
PIGer920 2010-04-11
  • 打赏
  • 举报
回复
flex帮助说的是监听器 说监听器不会自己干掉自己的
但是你问的似乎是组件b
missj 2010-04-11
  • 打赏
  • 举报
回复
因为flex帮助说的是:
如果不再需要某个事件侦听器,可调用 removeEventListener() 删除它,否则会产生内存问题。事件侦听器不会自动从内存中删除,因为只要调度对象存在,垃圾回收器就不会删除侦听器(除非 useWeakReference 参数设置为 true)。

879

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 ColdFusion
社区管理员
  • ColdFusion社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧