Swift 循环引用问题与引用计数

312 阅读1分钟

不允许循环引用


class A { 
    var b: B = B() 
    var s = "s" 
} 

class B { 
    var a: A = A() 
} 

var a = A() 
var b = B() 
a.s = "wo"

以上代码不能运行成功

image.png

引用计数

在内存管理策略方面,Swift 使用引用计数的方式来判断对象是否应该被回收。当对象被引用的计数值为 0 时,对象会被回收。

在以上提到的循环引用的例子中,因为 A 与 B 互相引用对方,若允许循环引用,会导致各自的计数值总是不会为 0 ,对象无法被回收。

所以,Swift 在编译的代码的时候就会检查循环引用的情况,并且发出错误提醒。