3

在简单的情况下,它就像紧盯着几行代码一样微不足道:

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# 世界中所做的那样)?

4

1 回答 1

6

您可以使用工具检测强引用循环,而不是实现对象图遍历:它可以识别内存泄漏并以图形方式显示循环(Apple Instruments 文档

您应该用 Swift 中的弱实例变量替换每个客观的 C 弱属性

    class B {
      weak var a: A?
    }

如果您可以确定它永远不会将 nil 作为值,您可以在它前面加上 unowned

    class B {
      unowned var a: A
    }

然后,您可以访问该属性,而无需使用 ! 强制解包变量。

如果您的 Objective-C 代码使用了 arc 之前的标准 @properties 属性,则可能还有更多内容

于 2014-06-05T07:58:28.537 回答