У меня есть приложение для iPhone в Cocos2d, которое иногда вылетает на реальном устройстве из-за проблем с памятью.
Что я обнаружил, так это то, что сцены при переключении не высвобождаются полностью - для них [retainCount]
составляет примерно 4-10 :)
dealloc
метод никогда не вызывается, и тогда я предполагаю, что, когда я переключаю сцены несколько раз, появляется проблема с памятью.
Мне интересно - где мне выпустить сцену?Так как у него есть число детей, я полагаю, что я должен сделать их удаление.Но оказывается, что удаление всех дочерних элементов из слоя не уменьшает его количество.Я добавил такой фрагмент кода в мой cleanup
метод:
- (void) cleanup {
while ([self.children count] > 0) {
CCLOG(@"child: %d - %@ rc: %d", 0, [self.children objectAtIndex:0], [[self.children objectAtIndex:0] retainCount]);
[self removeChild:[self.children objectAtIndex:0] cleanup:YES];
}
[super cleanup];
}
Но тогда метод [self retainCount]
все равно возвращает число больше 1 или 0, и мой dealloc
не вызывается,
Что я должен сделать, чтобы правильно освободить этих детей?Если я добавлю свой собственный подкласс CCSprite
как дочерний, должен ли я сделать что-то конкретное в методе release
или dealloc
этого класса, в другом случае, просто вызовя его [super]
метод?