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文档,在此解释.
归档时间: |
|
查看次数: |
5306 次 |
最近记录: |