我正在使用CCScene的GameScene子類的一些靜態實例。從GameScene調用Cocos2d和iOS:如何處理靜態CCScene的dealloc方法
[[CCDirector sharedDirector] replaceScene:[MainMenuScene scene]];
不會觸發GameScene的dealloc方法。
一旦我再次加載場景(並創建一個新的GameScene)的方法被稱爲:
+(id) sceneWithId:(int)sceneId
{
CCScene* scene = [CCScene node];
GameScene* gameScene = [[self alloc] initWithId:sceneId];
[scene addChild:gameScene z:0 tag:GameSceneLayerTagGame];
return scene;
}
-(id) initWithId:(int)sceneId
{
CCLOG(@"scene With id");
if ((self = [super init]))
{
instanceOfGameScene = self;
//ONLY NOW the previous object becomes unreferenced and the memory management system is allowed to deallocate it
我想了解,如果有迫使dealloc方法的方式調用每次我替換(靜態)場景,而不僅僅是當內存被「釋放」時。
或者,如果我應該寫一些清理方法,以阻止正在進行的進程,我不想影響MainMenuScene(例如,我在GameScene的dealloc方法中放置了一個停止背景音樂方法調用,背景音樂處於靜態類中,並且不會作爲子對象添加到GameScene中,然後在MainMenuScene中繼續播放)。因此
我速戰速決的建議是做這樣的事情:
[self stopAllStuffInOtherStaticClassesThatAreRelatedOnlyToGameScene];
[[CCDirector sharedDirector] replaceScene:[MainMenuScene scene]];
這是一個好辦法?
編輯:何時是明智的在dealloc方法中添加此代碼?
[self removeAllChildrenWithCleanup:TRUE];
但很遺憾是一個痛苦。 LearnCocos2d中的GameScene類怎麼樣?我有一個MainMenu,我從中推送GameScene,然後從GameScene回到MainMenu。我將GameScene保持爲靜態,因爲它對於子節點很有用(例如,在您的代碼中,GameScene的子類通過其共享實例訪問該場景)。我相信我錯了。但是,請問您能否就ShootEmUp示例作出澄清?處理MainMenuScene和不同級別的最佳方法是什麼?有沒有Cocos2D內存管理的模式? – mm24
在另一篇文章中爲LearnCocos2d發表了評論,謝謝:)! http://stackoverflow.com/questions/12396352/cocos2d-with-arc-what-is-the-best-implementation-of-singleton-pattern-for-games – mm24