繁体   English   中英

关于CCArray的行为

[英]About behavior of CCArray

我对CCArray有疑问。 我写的代码如下。

文件

class GameScene : public cocos2d::CCLayer{

public:
    CCArray *arrayA;
    CCArray *arrayB;

    void funcA();
    void funcB();

    CREATE_FUNC(GameScene);

}

cpp文件

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释放?

如果要从plist文件获取数组,则无需使用new运算符创建它。 只需分配给CCArray *的成员指针,如果要在所有成员函数中访问它,则必须在分配后保留它。 否则,它将在控制权超出功能时被释放并引发异常或成为垃圾。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM