Cocos2d-x 內存管理中retain() 、autoRelease()、release()

首先要知道的:

在Cocos2d-x中,create()會設置爲autorelease() ,如果用create()出來的對象沒有人認領,即沒有被addchild(),那麼在每一幀刷新的時候,Cocos2d-x檢測到這個對象沒人要,就會把他釋放,釋放之後我們再去用這個對象,就可能會出現崩潰等問題。


那麼一個沒人要的對象怎麼樣保持原來的狀態而不被自動釋放呢?

用retain(),在create()之後,保持這個對象,就不會被自動釋放了。

  1. testSprite = CCSprite::create("HelloWorld.png");    
  2. testSprite->retain();   

如果我不用create(),直接new一個出來呢?

那一定要先給這個對象加上 autorelease(),因爲retain()、release()都是建立在autorelease()基礎之上的。


  1. CCSprite* CCSprite::create(const char *pszFileName)    
  2. {    
  3.     CCSprite *pobSprite = new CCSprite();    
  4.     if (pobSprite && pobSprite->initWithFile(pszFileName))    
  5.     {    
  6.         pobSprite->autorelease();    
  7.         return pobSprite;    
  8.     }    
  9.     CC_SAFE_DELETE(pobSprite);    
  10.     return NULL;    
  11. }   


注意:

只有在對象沒有被人認領的時候才需要使用retain()。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章