在简单的情况下,对于几行代码的强烈盯着它是微不足道的:
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#世界中那样)?
答案 0 :(得分:6)
不是实现对象图遍历,而是可以使用仪器检测强引用周期:它识别内存泄漏并以图形方式显示周期(Apple instruments documentation)
你应该用Swift中的弱实例变量替换每个目标C弱属性
class B {
weak var a: A?
}
如果你可以确定它永远不会将nil作为一个值,你可以用无主的
作为前缀 class B {
unowned var a: A
}
然后您可以访问该属性,而无需使用!
强制解包该变量如果你的Objective-C代码使用在arc之前成为常态的@properties属性,那么可能会有更多内容