[英]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.