1

addChild()の前にretain()を呼び出す必要がある理由を誰か教えてください自分たちで?

bool GameOverScene::init()
{

    if( CCScene::init() )
    {
        this->_layer = GameOverLayer::create();
        this->_layer->retain();
        this->addChild(_layer);

        return true;
    }
    else
    {
        return false;
    }
}

GameOverScene::~GameOverScene()
{

    if (_layer)
    {
        _layer->release();
        _layer = NULL;
    }
} 
4

2 に答える 2

0

返信ありがとうございます。しかし、別の質問に出会いました。

void TextureCacheTestScene::runThisTest()
{

    CCLayer* pLayer = new TextureCacheTest(); // not add the reference for pLayer
    addChild(pLayer); // add 1

    CCDirector::sharedDirector()->replaceScene(this);
    pLayer->release(); // delete 1
}

replaceScene() の後に release() を呼び出す必要があるのはなぜですか? replaceScene がレイヤーではなくシーンの参照を追加していることがわかったので、何が起こったのか混乱しています。

  1. addChild(pLayer) // pLayer の参照を追加します。
  2. relplaceScene() // シーンの参照を追加します; (pLayer の参照を追加しないでください)
  3. pLayer->release() // pLayer の参照を削除します。では、なぜプレーヤーはリサイクルされないのでしょうか? シーンが生きている場合、プレーヤーをリサイクルできないとは思いません。参照アカウントは気にしないと思います。
于 2013-04-19T03:05:16.167 に答える