在Swift中,程序员负责打破对象之间的循环?

Ian*_*ose 10 garbage-collection reference-counting swift

据我了解,Swift使用自动引用计数进行垃圾收集.

这让我回到了很多年前,当时我是一名COM程序员.

当对象超出范围时,VB6(以及之前)自动化了引用计数的过程,大多数时候这足以让程序员忘记内存管理.

但是,如果对象之间存在循环,.eg

Car->WheelsCollection contains pointers to wheels
Wheel->CurrentCar constrains a pointer to the car the wheel is currently installed on
Run Code Online (Sandbox Code Playgroud)

然后,当汽车的一个实例超出范围时,它不会被垃圾收集,因为汽车保持车轮活着,并且车轮保持车辆活着.

在Swift中使用哪些程序员模式或其他方式来避免或缓解此问题?

Lea*_*ros 12

这是一个简单的保留周期,您必须使用弱引用来解决它.

假设这是你当前的课程.

class Car {
  var wheel: Wheel?
}

class Wheel {
  var currentCar: Car?
}
Run Code Online (Sandbox Code Playgroud)

和你目前的情况

var myCar: Car? = Car()
var myWheel: Wheel? = Wheel()

myCar!.wheel = myWheel
Run Code Online (Sandbox Code Playgroud)

要解决这个问题,你必须声明其中一个weak,例如:weak var currentCar: Car?.

官方Swift文档,在此解释.