2012-06-04 148 views
4

究竟是dealloc方法的Cocos2D場景調用? 正確加載另一個場景?或者在場景加載完成後?
此外,如果我打算覆蓋它,那麼必須在dealloc方法中?
顯然,cocos2D自動刪除場景解除分配時連接到場景的所有節點。但是,如果我打算覆蓋它,特別是我必須調用哪些方法? 那麼,如何管理我的場景以確保它們無泄漏,100%? 在此先感謝!Cocos2D場景釋放

回答

1

CCScene的釋放器遵循與任何其他對象相同的規則。它將在CCScene的引用計數達到零時運行。

默認情況下,場景不關心另一個即將取代它的場景,但如果您正在使用過渡更改場景,則會有一段時間同時存在兩個場景。當過渡結束時,過渡將釋放它對第一個場景的引用,這可能是最後一個這樣的引用,並且第一場景將被釋放。

在您的場景釋放器中,放置一個CCLOG以查看它的運行時間。我把每一個都確定下來。

通常,手動發佈您使用從alloc,newcopy開始的方法創建的任何對象,無論它是否爲Cocos2D對象或其他。其他創建方法(例如Cocos2D的node)不需要手動釋放,除非您自己也手動選擇了retain對象,如果您不打算將它作爲子節點直接添加到另一個節點,這可能是明智的。如你所說,將一個節點作爲孩子添加到另一個並不意味着它需要額外的release; Cocos2D將處理那個。

+0

哦......我想我現在明白了!不過,現在我擁有一個擁有cocos2D節點的對象的場景。每次我「刷新」它時,我都會使用init。這是否意味着我在泄漏記憶? (我只在dealloc方法中釋放一次,再次感謝! – wayway

+0

道歉,你是對的,它是導致保留計數被實現的alloc,而不是init - 但它們通常一起使用。在init中執行 - 通常會在init中創建其他對象,因此如果在再次調用init之前沒有釋放這些對象,則可能會遇到問題。 –

1

您在場景類中分配的每個對象都沒有作爲子項添加到場景中,必須顯式釋放。

當您用另一個場景對象替換它(使用replaceScene方法)或從場景堆棧中彈出場景時,會釋放一個場景(並且大部分時間將其釋放,如果您沒有將其保留在其他場景中)。

總是建議查看源代碼(其中包含非常有用的註釋),並瞭解如果您自定義場景類別時應完成的操作。