1、create、addChild ------自动释放
2、create + retain,必须在析构时调用delete或release,否则内存泄露
3、new + autorelease + addChild ------自动释放
4、new + autorelease + retain -----同上2
5、 new + addChild + release/delete // 这样做是错误的,在没有autorelease加入内存池之前,
调用了addChild添加到node树,这样当绘制该根节点时,会报错。
create()会retain一次; autorelease()不会retain,只是添加到内存池;addChild会retain一次;
======================================
create(); 对象归内存池管理
======================================
对象的创建及其释放的过程 :
1、new方式
==非自动释放==================
{
this->m_sprite = new CCSprite(); // ref 1,没有被加入自动释放池,所以除非手动delete或者release,
否则不会被释放,此时,该精灵对象归本类所有,释放也由本类释放。
}
{
this->m_sprite->release(); // ref 0,release函数中会先将池内引用计数减一,然后判断,如果引用计数为0,就执行delete对象。
或者
delete this->m_sprite;
}
==自动释放==================
{
this->m_sprite = new CCSprite(); // ref 1
this->m_sprite->autorelease(); // ref 1,加入了当前自动释放池,等到切换到下一个帧/画面时,会自动执行pool的释放
this->m_sprite->retain(); // ref 2,该对象将由本类管理,所以在析构中应调用this->m_sprite->release(); 或者 delete this->m_sprite;
或者
this->addChild ( this->m_sprite ); // ref 2, 自动释放
}
=============================
============================================================