gpt4 book ai didi

ios - 检测 Storyboard分配的 Swift 对象的引用

转载 作者:行者123 更新时间:2023-11-30 14:19:19 26 4
gpt4 key购买 nike

我正在使用 Swift 开发一款 iOS 游戏。游戏按回合进行,回合结束后就不再需要了。因此,与传统应用程序不同的是,当有人离开 Storyboard场景时, Storyboard场景可能会保留在周围,我希望当游戏导航到该回合后的场景时,该回合的场景会被销毁。

我非常有信心我已经找到了一种方法来做到这一点,因为我正在实例化场景中的某些对象,并且我已经验证了当回合结束并导航到下一个场景时,这些对象的 deinit 方法会被调用。问题是,对于其中一个对象,没有调用 deinit 方法,我一直无法弄清楚为什么。 Storyboard场景应该是唯一引用该对象的东西,并且搜索源代码没有发现任何其他用法。似乎 Storyboard场景旁边的某个东西以某种方式引用了该对象,并在场景消失时使其保持事件状态。

我已经验证了该对象是通过在其 init 方法中设置断点来创建的,并且在开始回合时会命中该断点。

我尝试使用分配工具来跟踪可能引用该对象的内容。然而,当我运行游戏并完成回合时。我找不到任何证据表明分配工具曾经见过该物体。我怀疑该仪器可能无法跟踪由 Storyboard场景创建的对象,特别是因为我找不到与 Storyboard一起删除的其他 Storyboard对象的痕迹。

可以做什么来确定为什么这个对象似乎在应该拥有它的 Storyboard场景的生命周期之后仍然存在?

最佳答案

我想找到了为什么该对象没有被销毁。在它的初始化程序中,它将闭包应用于其他东西。闭包包含对对象成员的引用,因此我认为闭包正在强烈捕获 self,即使成功编译从来没有明确需要 self。这可能是 Swift 编译器的一个错误;它可能会发出有关此的警告或错误;发现和/或防止问题会更容易。无论如何,我更改了闭包,以便它将对象的成员捕获为无主,现在该对象似乎已被销毁。

关于ios - 检测 Storyboard分配的 Swift 对象的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30689281/

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