iOS-即使实际应用程序(SpriteKit应用程序)没有显示内存泄漏,内存使用量也会不断增长

iOS-即使实际应用程序(SpriteKit应用程序)没有显示内存泄漏,内存使用量也会不断增长,ios,memory-management,memory-leaks,sprite-kit,instruments,Ios,Memory Management,Memory Leaks,Sprite Kit,Instruments,我有一个精灵工具包游戏,我正在建设和接近完成,所以我开始分析应用程序,以确保我没有内存泄漏等,以提高性能 我注意到,当我运行应用程序时,我的内存使用量每秒增长约1mb: 所以我开始运行Instruments,对它的使用不太熟悉,但从在线教程中收集到的信息来看,需要注意的主要问题是持久分配对象的数量,以确保您希望释放的对象实际上是释放的,即您摧毁的敌人,从场景中移除的项目符号等。仪器确实显示了整个应用程序生命周期中预期的持久/暂时解除分配对象的数量,但每10-20秒会报告2000个内存泄漏-不确

我有一个精灵工具包游戏,我正在建设和接近完成,所以我开始分析应用程序,以确保我没有内存泄漏等,以提高性能

我注意到,当我运行应用程序时,我的内存使用量每秒增长约1mb:

所以我开始运行Instruments,对它的使用不太熟悉,但从在线教程中收集到的信息来看,需要注意的主要问题是持久分配对象的数量,以确保您希望释放的对象实际上是释放的,即您摧毁的敌人,从场景中移除的项目符号等。仪器确实显示了整个应用程序生命周期中预期的持久/暂时解除分配对象的数量,但每10-20秒会报告2000个内存泄漏-不确定是否来自设备上的其他应用程序或我的应用程序:

这是另一张没有过滤我的应用程序名称的内存泄漏图片-所以不确定是我的应用程序造成的还是没有:

如果我让应用程序长时间运行10分钟以上,它最终会崩溃,原因是:

Message from debugger: Terminated due to memory issue

有没有关于如何弄清楚发生了什么的建议?报告的~2000内存泄漏是否来自我的应用程序?我是不是缺少一些乐器

好的,当启用“showsPhysics”时,问题是苹果的Bug。关闭此功能立即解决了我的问题。谢谢@SklyerLauren。

你的标题说没有泄漏,但仪器说有数千个泄漏?@dan抱歉,意思是应用程序本身没有泄漏。更新标题。谢谢。正如你所看到的,这是从一开始就要考虑的事情,而不是当你完成你的应用程序时。覆盖deinits和设计对象之间的关系是防止这种情况发生的措施。您应该覆盖您创建的每个类的deinit,并在适当的地方使用弱/无主引用。因此,没有解决这个问题的灵丹妙药,而是遍历所有代码并搜索保留周期。当实例A对实例B的引用很强,而实例B对实例A的引用很强时,就会发生保留循环。简言之,要打破此循环,请将一个引用设置为弱引用。@Whirlwind对于误导性信息表示抱歉,我在开发应用程序的整个过程中都考虑过这一点,但我没有经常对其进行分析。我不相信我的问题是一个循环。现在,我禁用了几乎所有的功能,如生成、背景滚动、音乐、更新方法中的代码等,应用程序仍然稳定地增加了大约每秒0.5mb的内存。它所做的一切就是显示一个坐在黑屏底部的玩家……还有一个旁注——我的应用程序的流程是主菜单场景->角色选择场景->游戏场景。现在,在主菜单场景或角色选择场景中,由于复杂的背景层等原因,内存保持在静态水平~108mb。但一旦我进入游戏场景,即使一切都被禁用,只有一个黑屏,它大约每秒增长0.1mb。有时这可以解决内存泄漏问题,但它不是必需的,而且通常会隐藏另一个问题。当您呈现一个新场景时,它将自动释放,除非有一个保留周期。我猜你是在用self。在闭合或阻塞中。一旦你移除了这个动作,你就不再有漏洞了。长话短说如果你用self而不是弱self scene->SKActionBlockWithSelfSKActionBlockWithSelf@SkylerLauren谢谢你的反馈。似乎我弄错了,由于某种原因,内存使用量暂时停止增长,但现在仍在上升。每秒1mb,即使游戏场景中所有东西都被禁用,只有一个黑屏。这是我唯一有这个问题的场景,其他的都很好。太奇怪了。很可能这是一个合法的苹果病毒,已经有报道了。排除故障也非常令人沮丧,除非你碰巧遇到听说过的人。啊,就是这样!天哪,真烦人。现在我知道了。。。一旦我禁用了它,我的应用程序现在看起来真的很好。