由于某些原因,在更换场景时不会触发我的CCLayer的dealloc。以下是替换场景的代码:
[[CCDirector sharedDirector] replaceScene:[CCFadeTransition transitionWithDuration:2.0f scene:[HelloWorld scene]]];
按下按钮时会触发上面的代码。
我已经在dealloc方法中放置了一个永远不会触发的NSLog。
更新1:
我最后通过在更换场景之前手动释放内存来解决问题。
答案 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];
}
无需onEnter
和onExit
,因为如果您使用self.isTouchEnabled = YES;