问个内存释放的问题

1,我加载预制体时,resources.load和releaseAsset是必须一对一吗?如果只加载,不释放,系统不会自动释放吗?
2,我把预制体实例化节点时,instantiate和destroy也必须一对一吗?我从父节点removeAllChildren清空了节点,也不会自动释放吗?
3,如果加监听了,只销毁节点也不行,必须off全部监听吗?

js也是GC机制语言

1.如果是resources.load加载的资源,应该是需要手动释放的

父节点销毁了,子节点也会销毁的。监听的话最好在销毁的时候进行取消更保险,按道理cocos对节点身上的on监听也会有处理

所以每次都要手动销毁节点?只做移除,变成孤儿节点是不够的?

嗯,如果你是指node.removeFromRarent()移除一个节点的话,这个节点时不会销毁的,仍存在内存中

在销毁节点前,如果有监听要off,如果有计时器也要unscheduleAllCallbacks,全部都解除以后,再销毁,是吧?

明白了,果然gc机制不管那么多,着3处,还得手动,感谢解答。

1 不会自动释放,需要自己手动调用
2 instantiate出来的实例需要destroy后实例对象占用的内存才会释放,removeAllChildren只是移除了子节点,实例对象还会存在内存中,
3 如果是节点监听,销毁时会自动取消,自己写的事件监听系统要自己取消掉

这里说的是资源内存问题把,不关js什么事。
resources.load加载的资源和它引用的资源都加载进内存的,在cc.assetManager.assets能找到,如果下载加载会加快时间,resources.load越多的资源确实会越卡,看你应用规模,小的应用无所谓的,如果是有很多子游戏、关卡类似的资源,resources.load后还是要releaseAsset的

releaseAsset要确引用这个资源的节点销毁掉了,不然会出现新的问题