如下一个Layer :
class HelloWorld: public CCLayer{
private:
CCArray* arr;
public:
HelloWorld(){
arr = 0;
}
~HelloWorld(){
arr-release();
}
bool init(){
if(!CCLayer::init()){
return false;
}
arr = CCArray::create();
arr->retain(); //
注释:位置1
CCSprite* s = CCSripte::create(“hello.png”);
addChild(s);
arr->addObject(s);
schduleUpdate();
}
void update(float dt){
CCSprite* s = (CCSprite*)arr->objectAtIndex(0);
s->setPosition(ccp(100, 100));
}
}
请关注CCArray的指针 arr。
总所周知,“注释:位置1” 这里要调用retain,才能保证在之后的绘图周期里 arr 不被自动释放, 也就是在该图层的生命周期内,update函数里面arr一直可用。
问题如下:
在“位置1” 这里arr调用了retain后,arr 的 m_uReference = 2 ( new出来引用数为1,autorelease 先放入数组 m_uReference=2,然后release了一次 m_uReference=1,再retain m_uReference=2 ),
并且已经被加入到了autoReleasePool里面
在一个绘图周期后,CCPoolManager会调用pop,然后对释放池内所有的对象 release 一次。
那么对于 arr 这个指针,一个周期 release 后 m_uReference = 1;
而中间 arr 没有再被retain
那么再过一个周期,再被pop一次,arr不就被释放掉了吗?????
这就是我不明白的地方,为什么 arr 没有被自动释放?
望大神神神神神神。。。。。。。。们们们们。。。。。不啬赐教!!!!!!!!!!
:870: