2011-09-10 23 views
3

我又堅持了比賽的中斷問題,這次是怎麼一回事,因爲內存溢出我的,雖然,當我重播的水平,按以下步驟:在cocos2d遊戲中重玩級別的正確方法是防止終止?

第一步:有一個菜單按鈕,輕敲其菜單彈出窗口打開,這是通過push scene實現的,其推動前一場景的菜單類
第2步:在該菜單彈出窗口中,有三個按鈕:
1.back to game從前一狀態恢復遊戲,這是通過popping up the scene, 2.replay level,
3.back to home,

最後兩個都是通過替換現場來實現的,這導致了嚴重的內存泄露,因爲之前類的dealloc沒有被調用,所以在配置時顯示內存增加了10-20mb左右,並沒有減少。這可能導致問題的終止。

如何克服這個問題?我很困擾它。

回答

0

那麼我的所作所爲向你過來吧,這個問題是一個棘手的解決方案:

步驟如下:

第1步:做一個全局變量(標誌) 第2步:在全局存儲行動變量,如重放或回家
步驟3:彈出推送的場景(已釋放推場景的內存) 步驟4:檢查日程選擇器中的標記(要重新播放或返回到家)
第5步:替換問的場景(即釋放當前場景的內存)

這是我如何實現它,任何建議,將不勝感激。

0

這聽起來像你沒有從你的場景中發佈的東西。僅當對象的保留計數爲零時才調用Dealloc。查看你的代碼,並確保每個對象在你完成後都能正確釋放。

XCode 4中的分析工具(默認爲Cmd + Shift + B)應該能夠讓你明確知道你在泄漏什麼。

+0

實際上沒有我的問題是,我沒有得到釋放的機會,因爲我在菜單上點擊彈出的場景,並從該彈出的場景中,場景被替換。 – rptwsthi

+0

如果你彈出的場景中沒有其他物體保留它,它將被釋放。然後,該場景的對象應該在該場景的「dealloc」方法中正確釋放。 –

+0

它發生的情況與您所說的相同,但分配給出現該彈出窗口的場景的內存未被釋放,並且同一大小的塊將再次分配。:( – rptwsthi