不允许循环引用
class A {
var b: B = B()
var s = "s"
}
class B {
var a: A = A()
}
var a = A()
var b = B()
a.s = "wo"
以上代码不能运行成功
引用计数
在内存管理策略方面,Swift 使用引用计数的方式来判断对象是否应该被回收。当对象被引用的计数值为 0 时,对象会被回收。
在以上提到的循环引用的例子中,因为 A 与 B 互相引用对方,若允许循环引用,会导致各自的计数值总是不会为 0 ,对象无法被回收。
所以,Swift 在编译的代码的时候就会检查循环引用的情况,并且发出错误提醒。