节点调用 removeFromParent


可以看到节点只是从节点树移除了, 节点和脚本组件的关系依然存在, isValid依然为true, 这里只是一个赋值 parent=null, 可以把节点添加到其它节点树的其它位置, 节点就"活了"
节点调用 destroy


节点被移出节点树, 并且和脚本组件已经没关系了, 因为节点没有其它引用, 可以认为节点占用的内容已经被回收或者等待回收.脚本组件因为被当前的函数引用, 还不会回收, 等待timeout的函数执行完, 脚本组件占用的内存也会被回收.
CocosCreator 和 Cocos2d-x在对象的内存管理上是完全不同的.
因为c++没有自动内存管理, 谁申请内存谁负责释放内存(堆内存), 这是非常容易出错的, Cocos2d-x使用引用计数来做内存管理, 主要通过对象的容器(对象数组/对象字典)来做计数增减, 节点树就是这样一个容器. 所以节点树可以管理节点对象的内存生命周期. cocos2d-lua/js 虽然是脚本语言, 语言本身是有自动内存管理的, 但是节点的内存还是c++管理.
而creator因为要做h5游戏, 必须要用js做节点的内存管理, 为了统一接口, 在native上也使用js的内存管理.
而js的内存管理很简单, 一个对象没有引用, 它就会被销毁回收. 但是如何保证节点对象没有被引用呢? 一个节点被移除节点树,没有执行action, 没有事件监听, 除了本身挂载的脚本组件外没有被其它脚本引用, 那么就可以认为没有被引用, 垃圾回收会回收对象内存.
destroy会删除所有的action和事件监听, 所以调用destroy删除节点是有效的做法.