О поведении CCArray

0

У меня вопрос о CCArray. Я написал код следующим образом.

h.file

class GameScene : public cocos2d::CCLayer{

public:
    CCArray *arrayA;
    CCArray *arrayB;

    void funcA();
    void funcB();

    CREATE_FUNC(GameScene);

}

cpp.file

void GameScene::funcA()
{
    arrayA = new CCArray;
    arrayB = new CCArray;


    //---------------About arrayA-------------------------
    CCDictionary *plist = CCDictionnary::createWithContentsOfFile("Data.plist");    
    arrayA = (CCArray*) plist->objectForKey("fruit");

    CCLog("size of arrayA is %d ",arrayA->count() );  //ok (size = 3)


    //---------------About arrayB-------------------------
    CCSprite *obj =CCSprite::create("sample.png");
    arrayB->addobject(obj);

    CCLog("size of arrayB is %d ",arrayB->count() );  //ok (size = 1)


    funcB();

}




void GameScene::funcB()
{
    CCLog("size of arrayA is %d ",arrayA->count() );   // appear the error (size = 102938312)
    CCLog("size of arrayB is %d ",arrayB->count() );   // ok (size = 1)
}

Деталь Data.plist

<plist version="1.0">
<dict>
    <key>fruit</key>
    <array>
        <string>apple</string>
        <string>orange</string>
        <string>strawberry</string>
    </array>
</dict>
</plist>

В funcA я объявлял CCArrayA и CCArrayB. Я добавил объект для каждого массива по-другому.

Затем каждый массив показывал каждый размер массива с помощью CCLog, затем ни массив, ни ошибка.

Но в func B, хотя arrayB не изменил размер, такой же, как время funcA, arrayA изменит размер на странное значение.

Почему такое произошло?

Каким-то образом, когда выйдете из funcA, выйдет CCArrayA?

В этом случае, что я должен сделать, чтобы предотвратить освобождение CCArrayA?

Теги:
cocos2d-x

1 ответ

0
Лучший ответ

Если вы получаете массив из файла plist, вам не нужно создавать его с помощью нового оператора. Просто назначьте указатель на члену CCArray *, и если вы хотите получить к нему доступ во всех функциях-членах, вы должны сохранить его после назначения. В противном случае он будет выпущен и исключить исключение или стать мусором, когда управление перестанет функционировать.

  • 0
    Спасибо за ваш ответ. Я понимаю, что я должен сохранить CCArray после назначения. Благодаря вам у меня был хороший опыт.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню