У меня есть приложение для 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]
?