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