Это упрощенная версия проблемы, с которой я сейчас сталкиваюсь. Я сделал 2 пустых CCScene 1 & 2 и добавил CCLayer 1 & 2 на их соответствующую сцену. Я также добавил функцию касаний для переключения с сцены 1 на сцену 2 с помощью замены CCDirector.Cocos2d-iphone, не вызывающий dealloc при замене сцены
Однако dealloc никогда не вызывался во время замены сцены.
// scene & layer 2 are exactly the same as 1
@implementation MainScene
-(void)dealloc {
NSLog(@"scene dealloc");
[super dealloc];
}
-(id)init {
self = [super init];
if (self) {
layer = [[MainLayer alloc]init];
[self addChild:layer];
[layer release];
NSLog(@"test: %i", [layer retainCount]); //1
}
return self;
}
@implementation MainLayer
-(void)dealloc {
NSLog(@"layer dealloced");
[super dealloc];
}
-(id)init {
self = [super init];
if (self) {
self.isTouchEnabled = YES;
NSLog(@"test %i", [self retainCount]); //1
}
return self;
}
-(void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
NSLog(@"test %i", [self retainCount]); //2 --> ????
[[CCDirector sharedDirector] replaceScene:[[SecScene alloc]init]];
}
Кроме того, NSLog сообщил, что уровень остатка слоя равен 2, когда я касаюсь экрана. Неужели это даже происходит? Может ли кто-нибудь, возможно, сказать мне, что я сделал неправильно или это просто мое недоразумение, что keepCount должно быть 0, прежде чем dealloc будет вызван?
Эта проблема приводит к сбою моей основной игровой программы, просто переключаясь между различными сценами/слоями с помощью только статических спрайтов (и некоторых незначительных действий) снова и снова.
совет: использовать autorelease и избавить себя много проблем с управлением памятью! – LearnCocos2D