removeFromParent 和 destroy有什么区别吗?

http://www.cocos.com/docs/creator/scripting/create-destroy.html#

destroy 和 removeFromParent 的区别

调用一个节点的 removeFromParent 后,它不一定就能完全从内存中释放,因为有可能由于一些逻辑上的问题,导致程序中仍然引用到了这个对象。因此如果一个节点不再使用了,请直接调用它的 destroy 而不是 removeFromParent。destroy 不但会激活组件上的 onDestroy,还会降低内存泄露的几率,同时减轻内存泄露时的后果。

总之,如果一个节点不再使用,destroy 就对了,不需要 removeFromParent 也不需要设置 parent 为 null 哈。

1赞

嗯,就是因为这个帖子,所以更新了你现在看到的文档。

1赞

那我如果棋牌中,我发牌时候addChild进来,弃牌时候是destroy 还是removeFromParent呢??
我下一局发牌时候还是addchild的.

兄弟 棋牌用对象池

你要重新add,当然就不能destroy了。记住,removeFromParent 通常需要传入一个 false,否则默认会清空节点上绑定的事件和 action 等。

我经常用一个layout,然后用预制件实例化里面的表项,加到layout里面,不用的时候直接,用这个嗯layout 调用removeAllChild的方法,是不是也有问题?得一个一个的destroy

@jare destroy有一个不好的设计,当前帧没有从相关的children数组移除,这个设计感觉不合理
当前帧可用也应该从children移除吧

这个设计主要是为了避免潜在的错误。
比如防止遍历 children 的过程中 children 会不断改变。防止在同一帧内,destroy 的时机早晚,会影响对节点的一些操作。

removeFromParent 和 parent = null 性能太差了,请问官方如何提升性能

表示在removefromparent方法中又添加了destory语句

destroy调用之后,并不是马上调用onDestroy,好像会晚一点
我们遇到的一个问题就是这样:
destroy->其他事件进来->onDestroy
但是我们以为是destroy->onDestroy(里面带有销毁事件监听的代码)->其他事件不在调用进来

当我们调用destroy的代码时,后面马上打印this.node.valid===>true

请问设计就是这样子的吗?

destroy销毁操作,其实就是给对象打一个标记

,真正的销毁在 该帧的渲染层执行前进行。

,继续看这个方法

如果一个父节点,删除节点的同时,要新增节点,这种情况下要注意,不要destroy子节点,而是 子节点removeFromParent。

1赞

为什么呢?

那为什么我使用removeFromParent后去查看结点数会减少,而用destroy结点数没有任何变化呢

destroy 后发现它父节点的引用(getChildByName)还在…我还得再removeFromParent ?还是我应该removeFromParent 再destroy 风中凌乱中…

removeFromParent 再destroy