Это упрощенная версия проблемы, с которой я сталкиваюсь сейчас.
Я сделал 2 пустых CCScene 1 & 2 и добавил CCLayer 1 & 2 на их соответствующую сцену.
Я также добавил функцию касаний, чтобы переключаться со сцены 1 на сцену 2, используя замещающую сцену CCDirector.
Однако Deloc не вызывался во время замены сцены.
// 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. Это даже предположить, что происходит? Может кто-нибудь сказать мне, что я сделал неправильно, или это просто мое недоразумение, что retainCount должен быть равен 0, прежде чем вызывается dealloc?
Эта проблема вызывает сбой моей основной игровой программы при переключении между различными сценами / слоями со статическими спрайтами (и некоторыми незначительными действиями) снова и снова.