在简单的情况下,它就像紧盯着几行代码一样微不足道:
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# 世界中所做的那样)?
在简单的情况下,它就像紧盯着几行代码一样微不足道:
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 Instruments 文档)
您应该用 Swift 中的弱实例变量替换每个客观的 C 弱属性
class B {
weak var a: A?
}
如果您可以确定它永远不会将 nil 作为值,您可以在它前面加上 unowned
class B {
unowned var a: A
}
然后,您可以访问该属性,而无需使用 ! 强制解包变量。
如果您的 Objective-C 代码使用了 arc 之前的标准 @properties 属性,则可能还有更多内容