swift在什么情况下使用weak关键字

兄弟在线求帮请教下,swift在什么情况下使用weak关键字
最新回答
试卷看似简单但心机太重

2024-05-24 02:34:58

用到weak和unowned变量的另外一个地方就是使用协议(protocol)在多个class间去实现委托(delegation)的情况,因为swift中class是引用类型。结构体(structs)和enum(枚举)也能遵循协议,但是它们是值类型。如果一个父类带上一个子类使用委托,像这样:
class Kraken: LossOfLimbDelegate {
let tentacle = Tentacle()
init() {
tentacle.delegate = self
}
func limbHasBeenLost() {
startCrying()
}
}
protocol LossOfLimbDelegate {
func limbHasBeenLost()
}
class Tentacle {
var delegate: LossOfLimbDelegate?
func cutOffTentacle() {
delegate?.limbHasBeenLost()
}
}
那么我们就需要用weak变量。在这个例子里Tentacle以它所拥有的代理属性(delegate property)的形式持有一个对Kraken的强引用,同时Kraken在它的tentacle属性中也有一个对Tentacle的强引用。我们在代理声明之前加上一个weak说明符来解决: