У меня есть GameScene, где я добавляю большое изображение как ребенок.Я хочу заново создать GameScene для каждого уровня.Но после игры нескольких уровней, он получает предупреждение памяти и в конечном итоге падает.Метод dealloc никогда не вызывается.
начать с MainScene, при нажатии кнопки «Пуск» ->
[[CCDirector sharedDirector] replaceScene: [GameScene scene]];
при очистке уровня ->
[[CCDirector sharedDirector] replaceScene: [WinScene scene]];
при нажатии кнопки «Далее» ->
[[CCDirector sharedDirector] replaceScene: [GameScene scene]];
и т. Д ... Но дело GameScene никогда не запускается.(MainScene и WinScene в порядке)
для GameScene У меня есть
static GameScene* instanceOfGameScene;
другие соответствующие методы: (Я не думаю, что это instanceOfGameScene, который сохранил GameScene, поскольку он является общимПодходи ко мне, ОК в других моих проектах.)
-(id) init {
if ((self = [super init])) {
instanceOfGameScene = self;
etc...
-(void) dealloc {
CCLOG(@"game scene get dealloc'ed");
instanceOfGameScene = nil;
[super dealloc];
}
+(GameScene*) sharedScene
{
return instanceOfGameScene;
}
В WinScene я выполняю [[GameScene sharedScene] removeAllChildrenWithCleanup: YES] через 5 секунд, метод dealloc в GameScene наконец-то запускается,с программой принятый сигнал: «EXC_BAD_ACCESS».в последней строке - (void) removeAllChildrenWithCleanup: (BOOL) метод очистки в классе CCNode:
[children_ removeAllObjects];
стек глубже, ошибка - CCArray1026 *
/** Removes all objects from arr */
static inline void ccArrayRemoveAllObjects(ccArray *arr)
{
while( arr->num > 0 )
[arr->arr[--arr->num] release];
}