关于CCArray的行为

时间:2014-06-19 04:35:55

标签: c++ cocos2d-x

我对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。我以不同的方式为每个数组添加了一个obj。

接下来,每个数组都使用CCLog显示数组的每个大小,然后不会出现数组或错误。

但是,在函数B中,尽管arrayB没有改变与funcA时间相同的大小,但arrayA将大小更改为奇怪的值。

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

任何机会,当逃离funcA时,CCArrayA会被释放?

在这种情况下,我应该怎么做以防止CCArrayA发布?

1 个答案:

答案 0 :(得分:0)

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