我正在使用 CCScene 的 GameScene 子类的一些静态实例。从 GameScene 调用
[[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];