内存泄露问题请教

std::string str = “You pressed the close button. Windows Store Apps do not implement a close button.”;

CCArray *pArray = CCArray::create();
for (int i=0; i<1000000; i++) {
CCString *pStr = new CCString();
pStr->initWithFormat("%s", str.c_str());
pArray->addObject(pStr);
pStr->release();

}

入上述代码。按照正常情况new出来的CCstring将在这帧结束后随着CCArray被释放而释放,但是我用xcode监测内存变化,并没有减少。请问这个是啥原因呢。

这段代码没问题。

    CCString *pStr = new CCString();//_referenceCount==1
    pStr->initWithFormat("%s", str.c_str());//_referenceCount==1
    pArray->addObject(pStr);//_referenceCount==2
    pStr->release();//_referenceCount==1

一帧之后,由于

CCArray *pArray = CCArray::create();

会调用CCArray的析构,这个时候会调用ccArrayFree(data)让所有成员的计数-1,这个时候会调用相应成员的析构。

不推荐使用CCArray,推荐使用Vector

恩,主要是引擎自身用了很多CCArray啊。
for (int i=0; i<1000000; i++) {
CCString *pStr =CCString::create(“asdfasdfasdfasdfasdfasdfasdfasdf”);

}

按道理来说pStr是autorelease,所以在这帧结束后所有pstr都应该被释放,但是事实却是没有。内存监测显示内存并没有减少,我怀疑是CCArray出问题,所以又写了上面的测试代码。结果真是这样。

因为引擎的aotorelease是把现有对象加到一个自动释放池里。也就是添加到一个ccarray中,然后下一帧的时候这个数组会移除所有对象。所以我先试试是不是CCArray的问题。如果不是我再去看看自动释放池那边的具体逻辑。结果真是这个CCArray问题。

啊???什么意思?CCArray什么问题。。。

我看了下最新的代码v3.3rc0,也没有再使用CCArray啊?

我用的时2.2.5的

:3: 额刚用模拟器试试,xcode内存检测显示下一帧内存还是有下降到原来的水平,但是真机5S还是不回下降啊。

:12: :12:好像不是CCArray的问题。难道真是真机调试xcode6显示的内存使用情况不是时时的。