请教这样定时删除预制件有问题吗?

代码如下:

    // called every frame, uncomment this function to activate update callback
    update: function (dt) {
        // cc.log("update dt=%.2f", dt);
        // return;
        this.curTime = this.curTime - dt;
        if (this.curTime < 0) {
            this.curTime = Math.random()*2.0 + 1.0;
            // this.curTime = 10000;
            
            
            // 从预制件中创建实例
            var tPrefab = cc.instantiate(this.ball_prefab);
            tPrefab.parent = this.node;
            // 随机X坐标, 通常是-880~880之间
            var randomX = (Math.random()*((this.screenWidth - tPrefab.width * 2) / 2));

            if (Math.random() > 0.5) {
                randomX = randomX * -1.0;
            }

            // 创建出来的tPrefab是个cc.Node
            // cc.log("balls update tPrefab", tPrefab instanceof cc.Node);

            // cc.log("this.curTime:%.2f w:%.2f randomX:%.2f", this.curTime, tPrefab.width, randomX);
            tPrefab.setPosition(randomX,475);
            var destroyPrefabCallback = function(dt) {
                // 居然可以这样处理销毁
                // cc.log("destroyPrefab");

                if ( cc.isValid(tPrefab) ) {
                    tPrefab.destroy();
                } else {
                    // 真会跑到这里来的
                    cc.log("balls update not cc.isValid !!! ");
                    console.log('balls update not cc.isValid !!! ');
                }
            }
            // 定时销毁
            this.scheduleOnce(destroyPrefabCallback,10.0);
        }// if
    },

问题是这样会有内存泄漏,Android设备上内存只涨不跌。

逻辑很简单就是随机位置显示一个球,掉落动画,10秒后删除,没什么特别的东西

纯新手望解惑!

可以这样销毁,内存应该没问题,等过段时间 GC 触发后应该就会下降了。

谢谢!我再试试

试了Android 版本:
大约5分钟左右 能从120M内存一直涨到170M多,然后会降到150M左右 ,之后的十分钟一直稳定在150M

Windows的模拟器:
从一开始启动的90M一直涨到140左右 ,开了10多分钟稳定在130M左右

看截图会发现是《Unity5.x 从入门到精通》中115页,第七章《创建基本的2D游戏场景》中的资源

用U3D做一遍,再用cocos creator做一个逻辑和效果近似的,便于做开发流程和最终版本的对比,
当然主要针对移动设备上的效果。

cocos creator的工程如下:
my2d_20170726_1021.zip (1.8 MB)

另勾上Canvas的physics-bound.js的脚本的Mouse Joint就很容易crash,原因估计是鼠标点中球体时然后直接.destroy()有些关联没去掉导致的。(感兴趣的可以分析下这个问题,附件中的版本这个选项取消的)

对比下来U3D版本的apk包体大些20M,cocos creator的10M左右(打成etc1估计还会大一些)
除了包体小点,开发流程上已经比较接近了。

CPU和内存占用方法由于cocos creator版本还差个粒子效果没加,以及现在发现的内存爆涨问题,所以。。。。。。,才有本贴。

希望有经验的大侠赐教!

已经修复了,感谢反馈~
https://github.com/cocos-creator/engine/pull/1845

赞!
得好好学习学习