cocos2dx 的内存管理

来源:互联网 发布:linux vi修改文件 编辑:程序博客网 时间:2024/05/16 19:33
  
 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, 自动释放
}

=============================
 
============================================================

0 0
原创粉丝点击