ios如何解除分配未使用的 SKScene

发布时间: 2017/4/3 15:14:46
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有一个 SKScene 对象安装在 GameViewController。我实现了 dealloc 到 SKScene 子类如下︰

- (void)dealloc {
    NSLog(@"Dealloc: %@", self);
}

现在我想提出在 GameViewController 上的另一个视图控制器。我使用 storyboard 铺垫做到这一点。但是,提出了新的视图控制器后,我从来没有收到 SKScene dealloc。它被困在内存中。我的应用程序开始结冰后几分钟由于内存不足。我怎么能 dealloc 现场后提出新的视图控制器。

解决方法 1:

为了释放你 SKScene -你 > 实例应该消除保留它-> 每个指针然后ARC将自动释放它。

只需调用 [skView presentScene:nil]; 方法,也将删除 SCScene 和释放通过设置 SKView.scene 属性设置为零。

SKView *skView = (SKView *)self.view; 
GameScene *scene = (GameScene *)skView.scene; 

for(SKNode * child in scene.children)
{
    [child removeAllActions];
}
[scene removeAllChildren];
[scene removeAllActions];
[skView presentScene:nil]; 

注意通常你不需要删除一切从 SKScene 如果你的记忆托管权只是调用 [skView presentScene:nil]; 方法,电ARC会照顾它。

显然你有内在的东西 SKScene ,保留了它。 所以消除一切从它,我们就能消除保留周期。

这种解决方案不会总是工作,它将工作只有当一个的 SKActionsSKNodes 保留 SKScene 然而是你的情况,这个问题你 SKScene 可以从别处保留和这个答案不会真的帮你

官方微信
官方QQ群
31647020