2

我最近將現有的Cocos2D項目從版本0.8遷移到2.0 &啓用ARC。Cocos2D 2.0 ARC啓用不受控制deallocs

我這樣做的方式是蘋果的空應用程序模板&然後添加來自Cocos2d 2.x模板的代碼,因爲它有重大變化。之後,我添加了遊戲&中的代碼,對ARC問題的棄用代碼&進行了必要的更改。

由於遊戲正在工作,但並不如預期,我沒有動畫&遊戲正在佔用整個CPU的能力。在控制檯中,我看到所有東西都在創建後立即解除分配。我的舊代碼不是這個原因,因爲它甚至發生在我的任何場景被推送之前。

enter image description here

編輯 我也再次重複整個過程&作出從cocos2d的模板項目啓用了ARC-版本,但也同樣有..是,也許是很正常的事情?

回答

1

這是不正常的,雖然轉換爲ARC時常見的問題。 ARC將釋放超出範圍的對象,而在MRC下,alloc/init對象將留在內存中(並泄漏)。檢查你可能需要保留一個強有力的參考。

下面是轉換爲ARC工作之前的示例:

-(void) someMethod 
{ 
    id object = [[MyObject alloc] init]; 
} 

在MRC,對象停留在的someMethod返回後存儲器(泄漏)。在ARC下,當方法返回時,ARC清理對象。最簡單的解決方法是將對象轉換爲ivar(又名實例變量,類成員)。

還檢查單身人士。根據實現方式的不同,Singleton類可能會立即釋放。例如,如果靜態實例聲明爲__weak或__unsafe_unretained。

您還應該運行Xcode Analyzer(Build - > Analyze)來獲取潛在問題的指針。

+0

這是多多少少的情況..我希望它可以是框架內的某些東西,但經過很長時間的重構,現在一切都按預期運行,謝謝! – Kex