Após o fechamento do SKScene, a memória permanece alta
Eu uso um dispatch_onceNSObject para criar ponteiros de dados. Portanto, todos os indicadores de ativos do jogo são criados quando o controlador de exibição principal aparece. Para jogar, o usuário toca em umUIButton correspondente a um nível específico em umUIViewController. Deixe-me chamá-lo de LevelSelectionController. Quando o jogo terminar, o usuário tocará em um rótulo (SKLabel) E todas as ações e nós serão removidos.
[self removeAllActions];
[self removeAllChildren];
[self removeFromParent];
Além disso, umSKScene subclasse de um determinado nível delega a tarefa de retornar o usuário ao LevelSelectionController ao controlador de exibição que apresenta o jogoSKView do seguinte modo.
- (void)closeScene {
SKView *spriteView = [[SKView alloc] init];
[spriteView presentScene:nil];
[self.navigationController popViewControllerAnimated:YES];
}
O único problema que tenho é que a memória permanece alta quando o usuário sai da cena do jogo (SKScene). O jogo requer muitos recursos. Portanto, quando o jogo iniciar, o uso da memória aumentará para 200 MB. Quando o usuário retorna ao controlador de exibição de seleção de nível original, o simulador de jogo ainda consome 200 MB, de acordo comMonitor de Atividade. Quando o usuário entra em um nível diferente, o uso da memória aumenta em mais 10 MB. Então, como liberar a memória do último jogo depois que o usuário sair do SKScene?
Estou usando o ARC. A versão do Xcode é 5.1. O objetivo do desenvolvimento é o iOS 7.1.
Obrigado pela ajuda.
- Editar 1 -
Eu sou boba. Eu sei qual é o problema. Quando fecho a cena, estou criando um novo SKView, que depois o defini como nulo para sair da cena atual. Funciona. Mas não deve ser assim. Em vez disso, preciso definir o SKView atual como uma variável antes de apresentá-lo. Quando fecho a cena, preciso definir essa variável como nula. Hmm ... eu não estava pensando.
- Edição 2 - Há poucas alterações quando a cena atual é apresentada com zero. Removê-lo de removeFromSuperview não faz muito.