简体   繁体   English

关于CCArray的行为

[英]About behavior of CCArray

I have a question about CCArray. 我对CCArray有疑问。 I wrote the code as follows. 我写的代码如下。

h.file 文件

class GameScene : public cocos2d::CCLayer{

public:
    CCArray *arrayA;
    CCArray *arrayB;

    void funcA();
    void funcB();

    CREATE_FUNC(GameScene);

}

cpp.file 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)
}

Detail of Data.plist Data.plist的详细信息

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

In funcA, I declared CCArrayA and CCArrayB. 在funcA中,我声明了CCArrayA和CCArrayB。 I added an obj to each array in a different way. 我以不同的方式向每个数组添加了一个obj。

Next, each array showed each size of the array using CCLog, then neither array appear or the error. 接下来,每个数组使用CCLog显示数组的每个大小,然后既不出现数组也不出现错误。

But, in func B, though arrayB didn't change size same as time of funcA, arrayA change size to a strange value. 但是,在功能B中,尽管arrayB的大小与funcA的时间不同,但arrayA的大小却改变为一个奇怪的值。

Why did such a thing happen? 为什么会发生这种事情?

By any chance, when escape from funcA, CCArrayA is released? 偶然地,当从funcA逃脱时,CCArrayA被释放了吗?

In that case, what should I do to prevent CCArrayA from releasing? 在那种情况下,我该怎么做才能防止CCArrayA释放?

If you are getting array from plist file then you don't need to create it using new operator. 如果要从plist文件获取数组,则无需使用new运算符创建它。 Just assign to a member pointer of CCArray* and if you want to access it in all member functions then you have to retain it after assignment. 只需分配给CCArray *的成员指针,如果要在所有成员函数中访问它,则必须在分配后保留它。 Otherwise it will be released and throw exception or become garbage when control reaches out of function. 否则,它将在控制权超出功能时被释放并引发异常或成为垃圾。

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

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