如何在Swift中检测和调试强引用周期?

时间:2014-06-05 07:37:33

标签: profiling swift memory-profiling

在简单的情况下,对于几行代码的强烈盯着它是微不足道的:

class A {
    var b: B?
}

class B {
  var a: A?
}

var a = A()
var b = B()
a.b = b
b.a = a

如何为> 50k行代码项目解决此问题(从Objective-C / C ++移植)。例如,有没有办法开发一个工具来在运行时遍历对象图(就像在Java / C#世界中那样)?

1 个答案:

答案 0 :(得分:6)

不是实现对象图遍历,而是可以使用仪器检测强引用周期:它识别内存泄漏并以图形方式显示周期(Apple instruments documentation

你应该用Swift中的弱实例变量替换每个目标C弱属性

    class B {
      weak var a: A?
    }

如果你可以确定它永远不会将nil作为一个值,你可以用无主的

作为前缀
    class B {
      unowned var a: A
    }

然后您可以访问该属性,而无需使用!

强制解包该变量

如果你的Objective-C代码使用在arc之前成为常态的@properties属性,那么可能会有更多内容