gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 05:36:09 25 4
gpt4 key购买 nike

据我了解,Swift 使用自动引用计数来进行垃圾回收。

这让我回到了很多年前我还是一名 COM 程序员的时候。

VB6(及之前)在对象超出范围时自动执行减少引用计数的过程,大多数时候这足以让程序员忘记内存管理。

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

Car->WheelsCollection contains pointers to wheels
Wheel->CurrentCar constrains a pointer to the car the wheel is currently installed on

然后,当汽车的一个实例超出范围时,它不会被垃圾收集,因为汽车保持轮子事件,而轮子使汽车保持事件状态。

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

最佳答案

这是一个简单的循环引用,你必须使用弱引用来解决它。

假设这是您当前的类(class)。

class Car {
var wheel: Wheel?
}

class Wheel {
var currentCar: Car?
}

和你的现状

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

myCar!.wheel = myWheel

要解决这个问题,您必须将其中之一声明为weak,例如:weak var currentCar: Car?

Swift 官方文档对其进行了解释 here .

关于garbage-collection - 在 Swift 中,程序员负责打破对象之间的循环吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24010832/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com