在Cocos2d中替换场景时不会触发dealloc

时间:2011-03-08 17:39:53

标签: cocos2d-iphone

由于某些原因,在更换场景时不会触发我的CCLayer的dealloc。以下是替换场景的代码:

[[CCDirector sharedDirector] replaceScene:[CCFadeTransition transitionWithDuration:2.0f scene:[HelloWorld scene]]];

按下按钮时会触发上面的代码。

我已经在dealloc方法中放置了一个永远不会触发的NSLog。

更新1:

我最后通过在更换场景之前手动释放内存来解决问题。

2 个答案:

答案 0 :(得分:6)

当我第一次开始使用cocos2d时,我遇到了同样的问题。 在我的情况下,我被添加为目标委托自我,这意味着对自我的引用计数增加了。

[[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:2]swallowsTouches:NO];

我通过删除所有委托来解决这个问题(也可以指定特定的委托):

[[CCTouchDispatcher sharedDispatcher] removeAllDelegates];

答案 1 :(得分:0)

根据this post at cocos2d-iphone forum,您只需在self.isTouchEnabled = YES;方法中调用init即可使Cocos2D在CCTouchDispatcher上自动调用removeDelegate:方法。基本上下面的代码就足够了:

- (void)init {
   // do the usual [super init] stuff


   self.isTouchEnabled = YES; // don't forget the self prefix!

   return self;
}

- (void)registerWithTouchDispatcher {
   [[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:2 swallowsTouches:NO]; 
}

无需onEnteronExit,因为如果您使用self.isTouchEnabled = YES;

,则应自动处理