关于carray的行为

About behavior of CCArray

本文关键字:carray 关于      更新时间:2023-10-16

我有一个关于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显示每个数组的大小,然后数组都不出现或错误。

但是,在函数B中,虽然arrayB没有像funcA的时间一样改变大小,但arrayA将大小改变为一个奇怪的值

为什么会发生这样的事情?

在逃离funcA时,可能会释放CCArrayA ?

在这种情况下,我应该做些什么来阻止CCArrayA释放?

如果你从plist文件中获得数组,那么你不需要使用new操作符创建它。只要赋值给CCArray*的成员指针,如果你想在所有成员函数中访问它,那么你必须在赋值后保留它。否则,当控制超出功能时,它将被释放并抛出异常或成为垃圾。