0

cocos2d-x的引用计数功能听起来很吸引人,但是当我在我的项目中使用它时,我发现“内存不足”的问题仍然无法消除,例如有一个非常简单的案例如下:

当我释放CCLayer时,它的子节点不会同时释放。对吗?在释放CCLayer之前,我是否必须手动释放子节点,如下所示?

void MyLayer::releaseChildren(){
    CCArray * children = this->getChidren();//"this" pointer is the CCLayer
    CCObject * obj;
    CCARRAY_FOREACH(childen,obj)
    {
      CCNode * child = static_cast<Node*>(obj);
      child->release;
    }
}

如果你能分享你的项目实践,那对我很有帮助

4

2 回答 2

1

我可以确定的是您不需要手动释放子节点。

通常,如果您输入了 aCCLayerrelease方法,您很可能调用了removeChildorremoveFromParent或其他类似的方法。

它会在删除父节点之前删除并释放子节点。您可以查看了解详细信息。Node::removeChild() Node::detachChild

EDIT 2015-05-26 Node::detachChild在版本 > 3.4 中被删除;使用Node::removeChildorNode::removeFromParent代替。

而你的“内存不足”问题可能是由其他问题引起的,比如没有取消计划,也没有删除通知观察者,也没有其他问题。

于 2013-11-11T08:47:08.343 回答
0

试试这个代码:

CCArray * children = this->getChildren();//"this" pointer is the CCLayer
CCObject * obj;
CCARRAY_FOREACH(children,obj)
{
    CCNode * child = static_cast<CCNode*>(obj);
    this->removeChild(child, true); //Remove the child 
    child->release();
    CC_SAFE_DELETE(child);
}
于 2014-01-06T12:23:15.597 回答