onDestroy回调问题

看文档说明

onDestroy
当组件调用了 destroy(),会在该帧结束被统一回收,此时会调用 onDestroy 回调。

但是如果直接删除挂载这个组件的这个node,这个节点直接删除了,不会触发这个组件的onDestroy函数。

“直接删除挂载这个组件的这个node”,怎么删除的呢

因为这个做游戏最常遇到的事情。
比如有一个nodeA,nodeB。 其中nodeA是NodeB的子节点,有一个组件C挂载在nodeA上。如果我直接删除nodeA或者nodeB。组件C的onDestroy函数是不会触发的。

我是可以通过遍历到组件C然后,执行destroy()函数,会触发它的onDestroy函数。但是上面的情景应该是最常见的。我们不可能删除任何node的时候,再去遍历一遍它所有的子节点和它上面对应的组件,再依次执行destroy()函数的。

因为我们有些数据的保存是放在onDestroy()中的。如果现在node节点直接删除,我不能得到任何通知或者消息,去进行保存数据。
这个和以前的cocos2dx还不太一样。因为以前有node的销毁函数,而现在是组件后。node的的销毁的时候,node上面的组件是不能获取任何通知和消息的,不知道如何进行处理了

查看了API。发现Node也有一个destroy函数。我上面说的都是组件的destroy函数。
node的destroy函数可以解决这个问题。

结贴吧。

没有这回事,你应该是什么地方搞错了。

creator 和 unity 的一个区别是,creator 的节点支持完全从场景中移除,但不销毁(对应 cocos2d 中的 removeFromParent
这种设计)
所以当你 parent = null 时,节点虽然不见了,但其实并没有销毁。销毁的话和 unity 一样,必须调用 destroy。

2赞