仪器:泄漏和分配(tvOS)
我目前正在制作一个tvOS应用程序。 这是我的第一个本地(Swift)应用程序。 该应用程序将是一个数字标牌应用程序,用于事件或公司的办公室。 与iOS / tvOS上的典型应用程序相比,一个很大的区别是它需要全天候运行,所以内存是这个应用程序的一个重要主题。 最小的泄漏最终会导致应用程序崩溃。
该应用程序不断循环遍历一组全屏幻灯片。 在屏幕的底部有一个10篇文章(每10秒更新一次) – 现在正在开发中)。 下面是天气幻灯片的截图,以获得一个想法。

目前该应用程序在一段时间后崩溃,我敢肯定,我已经缩小到股票行情(当禁用它,应用程序生活了几天)。 如果我使用仪器中的“泄漏”预设,我会得到以下结果: 它看起来像是泄漏条款实例。 我正在每10秒重新创build一次实例实例,并将它们提供给股票代码组件。 我认为这就是为什么新的实例泄漏每10秒。
在我开始使用乐器中的“泄漏”预设之前,我使用了“分配”预设,而对我来说这一切似乎都很好。 但是我可能误读了结果
使用分配: 我读到的方式是,目前有10个文章实例存在于内存中,31个已经存在但现在被清理 – 所以我是安全的。
但该应用程序仍然崩溃。
我已经读了很多关于保留周期的内容,在我认为我应该做的事情上实现了弱/无主。
所以我的问题不是关于代码,而是关于如何读取这些数据的更多信息,在这种情况下泄漏是什么意思,以及为什么我在“ 分配”窗口中看到这些“泄漏”不是持久对象?
(testing在多个设备+模拟器上完成)
如果您在仪器中看到的内存使用量稳定(即大约n GB /分钟或小时)增加,这是一个很好的信号,表示正在创build对象,但没有处理。 你们暗示虚弱和无主的变数使我认为你知道这一点,但你可能没有find你的泄漏的所有来源。 我build议在乐器中使用几代概要,并在堆分配中查看特定的类/对象。 你们的问题class的人数会稳步增加,而且可能永远不会减less。 尝试从那里debugging问题。
至于在这种情况下“泄漏”是什么意思,这就意味着:你的计算机不释放内存资源。 这看起来可能不一样,因为我们习惯于把泄漏看作是通过内存以更快的速度吃东西的东西(比如在四核上运行的无限循环等),但是这种泄漏实际上是相同的事情; 你的只是慢一点。
经过几个星期后,我回来了解什么是错的。 好消息,我发现我的泄漏,并解决了它!
通过移除另一个闭包内的闭包来解决问题,并保留对第一个闭包variables的引用。 这导致了一个保留周期。
我真的不明白为什么我没有find它,我在这里问了一个新的问题: 获取不同的数据在仪器为基础的方法剖析 。