Egret社区
1银子
首先讨论一点。var a = {} ; var b = {}; a.b = b;b.a = a;
当a = null b = null时,会不会产生内存泄漏。
我记得v8的垃圾回收还是比较智能的,可以处理该情况。应该不需要a.b =null; b.a =null;
延伸一下;
官网说不用的回调监听记得手动移除。但是界面里的按钮一般来说非常多,如果不移除监听回调,当界面移除时真的会产生内存泄漏吗?
我们在界面里给一个btn添加触摸回调btn.AddEventListenr(....);这时应该是把触摸回调加到btn内部的一个队列里。
假设界面移除前不手动removeEventListener。那么移除界面后会产生内存泄漏吗,根节点已经没有任何引用可以找到该界面,以及该按钮了。
这个问题我问了很多人,回答都不一样,官方给个统一回答吧。

分享到 :
0 人收藏

8 个回复

倒序浏览
soul0521  初窥堂奥 | 2017-10-13 09:59:21
最好的就是自己来控制。你能知道下次垃圾回收是什么时候回收?
萝卜书生  登堂入室 | 2017-10-13 10:17:28
13500815917 发表于 2017-10-13 10:02
1、设为null后,v8会进行回收。
2、 当用户将显示对象从显示列表中移除后,所有状态依然存在,该对象并非在 ...

感谢您的回答。我举个更简单的例子,比如一个btn添加了触摸回调。此时我将btn移除this.remove(this.btn)并且将引用设为null this.btn = null; 此时应该也会被回收吧、
萝卜书生  登堂入室 | 2017-10-13 10:17:31
13500815917 发表于 2017-10-13 10:02
1、设为null后,v8会进行回收。
2、 当用户将显示对象从显示列表中移除后,所有状态依然存在,该对象并非在 ...

感谢您的回答。我举个更简单的例子,比如一个btn添加了触摸回调。此时我将btn移除this.remove(this.btn)并且将引用设为null this.btn = null; 此时应该也会被回收吧、
阿斯顿  登堂入室 | 2017-10-13 10:22:48
萝卜书生 发表于 2017-10-13 10:17
感谢您的回答。我举个更简单的例子,比如一个btn添加了触摸回调。此时我将btn移除this.remove(this.btn) ...

不会
萝卜书生  登堂入室 | 2017-10-13 10:33:47

额,不明白为什么不会被回收额。btn从stage移除了,也没有任何变量指向这个btn,应该会被回收呀。
lgsycz  登堂入室 | 2017-10-13 14:51:10
本帖最后由 lgsycz 于 2017-10-13 14:59 编辑

说深奥的我也不懂 所以我写了这么个东西 [mw_shl_code=applescript,true]    /**移除监听 */
    export function removedListener(obj:any,listenerStyle:string,afun,thisObj:egret.DisplayObject){
        obj.once(egret.Event.REMOVED_FROM_STAGE,function(){
            obj.removeEventListener(listenerStyle,afun,thisObj);
        },thisObj);
    }[/mw_shl_code]还有这个[mw_shl_code=applescript,true]    /**移除缓动 */
    export function removedTweens(obj:egret.DisplayObject){
        obj.once(egret.Event.REMOVED_FROM_STAGE,function(){
            egret.Tween.removeTweens(obj);
        },obj);
        }[/mw_shl_code]
萝卜书生  登堂入室 | 2017-10-13 16:43:12
lgsycz 发表于 2017-10-13 14:51
说深奥的我也不懂 所以我写了这么个东西 [mw_shl_code=applescript,true]    /**移除监听 */
    export fu ...

嗯啊,这些东西我也其实也写了
Minisars  登堂入室 | 2017-10-16 10:09:01
萝卜书生 发表于 2017-10-13 10:33
额,不明白为什么不会被回收额。btn从stage移除了,也没有任何变量指向这个btn,应该会被回收呀。 ...

1 移除前会判断是否被其他类引用 如果引用则不会被回收  
2 如果强制回收 会出现更多问题 自己写的自己移除 这是最好的设计方式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|京网文[2014]0791-191号|京ICP证150115号|Egret社区 ( 京ICP备14025619号 )

Powered by Discuz! X3.4 © 2001-2019 Comsenz Inc.

返回顶部