【问题标题】:tvOS Swift SKScene dealloc is temperamentaltvOS Swift SKScene dealloc 喜怒无常
【发布时间】:2015-11-07 14:58:42
【问题描述】:

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

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

谁能告诉我为什么会发生这种情况?某些东西随机持有对 SKScene 的强烈参考。会不会和焦点或触摸有关?!

更新:

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

【问题讨论】:

    标签: swift sprite-kit skscene tvos apple-tv


    【解决方案1】:

    很难弄清楚为什么在没有实际代码的情况下保留对对象的引用,但我发现通常的罪魁祸首是在异步块内引用的对象或未声明为 weak 的委托。如果您使用的是 Xcode 8,则使用 Xcode 8 中引入的内存图来调试它会更容易。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-04
      • 1970-01-01
      • 1970-01-01
      • 2011-07-17
      • 2014-10-19
      • 1970-01-01
      • 1970-01-01
      • 2014-08-24
      相关资源
      最近更新 更多