Проблемы с памятью SpriteKit

Я новичок в разработке игр с помощью SpriteKit, и до сих пор все шло хорошо, но на самом деле я не могу управлять памятью.

Я создал первый UIViewController для выбора уровня, второй UIViewController, в котором присутствует SKScene игры. Проблема возникает, когда я возвращаюсь из SKScene к селектору уровня, и ни одна память не освобождается.

Из игры SKScene, когда пользователь нажимает кнопку «Назад», чтобы перейти к селектору уровня, я публикую уведомление, которое сообщает второму UIViewController выполнить переход.

//SKScene
[self removeAllActions];
[self removeAllChildren];
[self removeFromParent];

[[NSNotificationCenter defaultCenter]postNotificationName:@"toLevelSelector" object:nil userInfo:nil];

//Second UIViewController
- (void)toLevel:(NSNotification *)notif
{
    [self performSegueWithIdentifier:@"toLevelSelector" sender:self];
}

Можете ли вы помочь мне лучше понять, когда и где skview или skscene должны быть освобождены из памяти?


person Macaret    schedule 23.10.2014    source источник
comment
Можете ли вы объяснить, как вы определили, что сцена не была выпущена? Создают ли два контроллера представления разные экземпляры SKView (не рекомендуется)?   -  person LearnCocos2D    schedule 23.10.2014


Ответы (1)


Я думаю, что память не освобождается, потому что вы не отключили контроллер представления, который содержит SpriteKit. Когда я впервые попытался создать игру, в которой есть меню в UIViewControllers, а затем кнопка запускает игру SpriteKit, я обнаружил, что закрытие игры не завершает таймеры, звуки, музыку и т. д. Допустим, у вас есть UIViewController с именем MainMenuViewController и что у него есть кнопка который вызывает GameViewController, в котором вы запускаете игру SpriteKit. Итак, чтобы полностью закрыть игру, попробуйте реализовать этот метод в кнопке выхода из игры.

[(GameViewcontroller *)self.view.window.rootViewController dismissViewControllerAnimated:YES completion:nil];
person John Houston    schedule 12.09.2015