gpt4 book ai didi

ios - 如何释放未使用的 SKScene

转载 作者:行者123 更新时间:2023-11-28 18:54:33 25 4
gpt4 key购买 nike

我在 GameViewController 中设置了一个 SKScene 对象。我将 dealloc 实现到 SKScene 子类中,如下所示:

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

现在我想在 GameViewController 之上呈现另一个 View Controller 。我使用 Storyboard segue 来做到这一点。但是在呈现新的 View Controller 之后,我从未收到 SKScene dealloc。它卡在了内存中。由于内存不足,我的应用程序在几分钟后开始卡住。如何在呈现新 View Controller 后释放场景。

最佳答案

为了释放你的 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 可以从其他地方保留下来,这个答案不会真正帮助你

关于ios - 如何释放未使用的 SKScene,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35388658/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com