2012-01-24 39 views
1

我有一個關於cocos2d的問題。我有兩個場景在我的遊戲中都有很多精靈在現場。當我更換一個場景並加載另一個場景時發生了什麼?是否所有的精靈自動刪除或正在採取的回憶,當我在現場的dealloc釋放將被釋放?的Cocos2D場景內存管理

我無法理解這件事情,在這種情況下內存如何處理,所以任何人都可以解釋我的事情和一件事更重要的是這對我們來說是非常重要的,當我們在場景中加載時, 。新的場景是在你已經保留了精靈的memory..unless加載之後

回答

0

所有精靈都被釋放。

+0

不是真的,有一段時間,當兩個場景記憶活着,作爲第一個答案解釋 – xus

0

如果你在做什麼是

CCSprite* sprite = [CCSprite spriteWithFile:@"test.png"]; 

無保留或任何幻想,當你切換/轉換場景,這個場景的所有兒童(在這個例子中,精靈,會自動釋放你。不要把對象的所有權

但是,如果你讓說,如果你把對象的所有權,例如:

hero = [[CCSprite spriteWithFile:@"hero.png"] retain]; 
// or 
hero = [[CCSprite alloc] initWithFile:@"hero.png"]; 

,那麼你就需要釋放它沿y我們的dealloc

6

你叫replaceScene場景都將在內存中存在的時間很短期間的時刻!如果使用CCSceneTransition那麼這兩個場景都在內存過渡的時間。

的流程如下:

  • 場景A正在運行
  • 呼叫CCDirector replaceScene與sceneB
  • 場景B被初始化時,可以加載精靈等
  • 場景A被解除分配和存儲器釋放

您可以在一個場景中實現-(void) cleanup方法除去大部分我的改變場景前TS內容,你可能要推遲加載新的內容-(void) onEnter { [super onEnter]; }方法。

個人而言,我覺得在這種情況下更好的辦法了「裝載」的場景,自帶兩個場景(甚至有可能不會成爲活躍超過幾毫秒)的場景。這給下一場景初始化之前被釋放的第一個場景的時間。