在 Xcode 6.4 中处理强引用循环

Dealing with strong reference cycles in Xcode 6.4

最近,我收到了一个用 Swift 1.2 编写的相当大且丑陋的遗留代码,其中充满了相互引用的单例和管理器。我的任务之一是清理它并到达 初始主屏幕 的点 - 当所有管理器、视图、单例停止并归零时。

我目前跟踪泄漏的方法很简单。在每个有意义的 类 中,我都在计算 instancesCount,这是一个静态变量,它在 init 中增加并在取消初始化过程中减少。当然,在拥有所有成熟工具的 21 世纪,查找分配泄漏并不是一个聪明的主意,但是......我不知道为什么,Xcode 工具不是很有帮助。根据我的方法,他们指出了一切都很好的问题。例如,仪器显示我的一位经理从未被取消初始化 - 这不是真的,因为 初始主屏幕 中此特定经理的 instanceCount 为 0。奇怪。

无论如何,所有这一切都可能以问题结束:如何检测为什么我的实例无法取消初始化以及谁一直引用它

逐行阅读代码并查找 保留循环 的位置是毫无意义的,因为代码库非常复杂,而且时间——一如既往——有限。

将仪器与分配跟踪模板结合使用。它跟踪每个对象的引用计数变化,并显示它何时增加和何时减少。这里不需要人工监控。