gpt4 book ai didi

swift - tvOS Swift SKScene dealloc 喜怒无常

转载 作者:行者123 更新时间:2023-11-28 06:56:11 32 4
gpt4 key购买 nike

所以我有一个主菜单 UIViewController,然后显示一个新的 UIViewController 和一个包含 SKScene 的 SKView。除了使层次结构正常工作的基本要素外,我在设置中没有任何代码。

问题是,当 SKScene View 委托(delegate)其 UIViewController 对其自身调用 self.dismissViewControllerAnimated(true, completion: {}) 时,有时 UIViewController 解除分配的预期行为随后是 SKScene 解除分配发生了(我通过记录每个 deinit 方法来检查这一点)。但是只有一半的时间只有 UIViewController 会解除分配,使 SKScene 仍然存在并运行(尽管不可见)。发生这种情况时,SKScene 仍将运行,直到您在 Remote 上进行任何触摸或按下按钮,然后 SKScene 将停止运行并最终解除分配!

谁能告诉我为什么会发生这种情况?某些东西随机持有对 SKScene 的强烈引用。难道是跟焦点或触摸有关?!

更新:

这似乎与焦点或焦点引擎无关,正如我所说setNeedsFocusUpdate() & updateFocusIfNeeded() 在菜单 UIViewController 出现之后。焦点得到更新,但它并没有解决问题。而且 SKScene deinit() 发生在菜单 UIViewController 中的 override func touchesBegan() 方法之前,当 Controller 被触摸以终止 SKScene 时,甚至会调用它!

最佳答案

很难弄清楚为什么在没有实际代码的情况下保留对对象的引用,但我发现通常的罪魁祸首是在异步 block 内引用的对象或未声明为 weak 的委托(delegate).如果您使用的是 Xcode 8,则使用 Xcode 8 中引入的内存图可以更轻松地进行调试。

enter image description here

关于swift - tvOS Swift SKScene dealloc 喜怒无常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33584147/

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