Cocos2dx当node在析构的时候,它的children是怎么被释放的

lvhua_2004 2014-12-05 11:08:40
今天看CCNode的代码,没有发现它的child是在什么时候被释放的。
假如在一个scene的某个layer里加入了几个sprite, 在addChild的时候有如下的代码,sprite的referenceCount加1

void Node::addChild(Node *child, int zOrder, int tag)
{
-- insertChild(child)
-- pushBack(child) // -> call CCVector.h的pushBack
-- _data.push_back( object );
-- object->retain() // ->referenceCount+1
}

然后当scene在出栈的时候, 应该会去析构自己,按我的理解在析构的时候应该会去递归的所有的children的referenceCount减1,接着释放所有的sprite,但从CCNode的析构函数,没有看到这个过程,只是把children的parent设置成NULL.

Node::~Node()
{
for (auto& child : _children)
{
child->_parent = nullptr;
}
}

感觉应该是在某个地方释放了,只是我没有看到,麻烦哪位解答一下哈。 谢谢了。
...全文
395 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
笨木头 2014-12-05
  • 打赏
  • 举报
回复
Node有个_children成员变量,保存了Node的所有子节点,这个_children是一个Vector类型。 当Node被释放之后,_children也会被释放,当Vector被释放的时候,会调用自身的clear函数,clear函数里会调用列表里的对象的release函数,于是子节点都被释放了。


~Vector<T>()
    {
        CCLOGINFO("In the destructor of Vector.");
        clear();
    }

void clear()
    {
        for( auto it = std::begin(_data); it != std::end(_data); ++it ) {
            (*it)->release();
        }
        _data.clear();
    }
lvhua_2004 2014-12-05
  • 打赏
  • 举报
回复
看到了,谢谢了哈。
lvhua_2004 2014-12-05
  • 打赏
  • 举报
回复
看到了,谢谢了哈。

8,303

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧