0

cocos2d-x の参照カウント関数は非常に魅力的に思えますが、私のプロジェクトで使用すると、「メモリ不足」の問題がまだ解消されていないことがわかりました。たとえば、次のような非常に単純なケースがあります。

CCLayer を解放すると、その間、その子ノードは解放されません。次のように、CCLayer を解放する前に、子ノードを 1 つずつ手動で解放する必要がありますか?

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

私が確認できるのは、子ノードを手動で解放する必要がないということです。

CCLayer通常、のメソッドを入力した場合は、またはまたは他の同様のメソッドreleaseを呼び出している可能性が高いです。removeChildremoveFromParent

また、親ノードを削除する前に、子ノードを削除して解放します。詳細については、 および を参照してください。Node::removeChild() Node::detachChild

EDIT 2015-05-26 Node::detachChildはバージョン > 3.4 で削除されました。Node::removeChildまたはNode::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 に答える