Nach dem Schließen von SKScene bleibt der Speicher hoch

Ich benutze ein dispatch_onceNSObject Datenzeiger erstellen. Daher werden alle Spiel-Asset-Zeiger erstellt, wenn der Haupt-View-Controller angezeigt wird. Um ein Spiel zu spielen, tippt der Benutzer auf aUIButton entsprechend einer bestimmten Ebene auf aUIViewController. Nennen wir es LevelSelectionController. Wenn das Spiel vorbei ist, tippt der Benutzer auf ein Etikett (SKLabel). Alle Aktionen und Knoten werden entfernt.

[self removeAllActions];
[self removeAllChildren];
[self removeFromParent];

Darüber hinaus einSKScene Die Unterklasse für eine bestimmte Ebene delegiert die Aufgabe, den Benutzer an LevelSelectionController an den Viewcontroller zurückzugeben, der das Spiel präsentiertSKView wie folgt.

- (void)closeScene {
    SKView *spriteView = [[SKView alloc] init];
    [spriteView presentScene:nil];
    [self.navigationController popViewControllerAnimated:YES];
}

Das einzige Problem, das ich habe, ist, dass der Speicher hoch bleibt, wenn der Benutzer die Spielszene verlässt (SKScene). Das Spiel erfordert eine Menge Vermögenswerte. Wenn das Spiel gestartet wird, springt die Speichernutzung auf 200 MB. Wenn der Benutzer zum ursprünglichen Levelauswahl-Ansichtscontroller zurückkehrt, verbraucht der Spielsimulator immer noch 200 MBAktivitätsmonitor. Wenn der Benutzer eine andere Ebene betritt, springt die Speichernutzung um weitere 10 MB. Wie kann ich den Speicher für das letzte Spiel freigeben, wenn der Benutzer SKScene verlässt?

Ich benutze ARC. Die Xcode-Version ist 5.1. Das Entwicklungsziel ist iOS 7.1.

Danke für deine Hilfe.

- Edit 1 -

Ich bin dumm. Ich weiß was das Problem ist. Wenn ich die Szene schließe, erstelle ich eine neue SKView, die ich dann auf Null setze, um die aktuelle Szene zu verlassen. Es klappt. Das sollte aber nicht so sein. Stattdessen muss ich das aktuelle SKView auf eine Variable setzen, bevor ich es präsentiere. Wenn ich die Szene schließe, muss ich diese Variable auf Null setzen. Hmm ... ich habe nicht nachgedacht.

- Edit 2 - Es ändert sich wenig, wenn die aktuelle Szene mit Null dargestellt wird. Das Entfernen aus removeFromSuperview macht nicht viel.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage