gpt4 book ai didi

swift - 通过使用函数参数类型来避免弱引用?

转载 作者:搜寻专家 更新时间:2023-10-31 19:28:37 27 4
gpt4 key购买 nike

我有一个接受 block 作为参数的函数。我可以使用尾随闭包来传递代码块,但该闭包在保留 self 时必须使用 weak 引用。

例如,查看MyClass2的初始化器:

class MyClass {
func subscribe(using block: @escaping () -> Void) {
DispatchQueue.global().async {
block()
}
}
}

let test = MyClass()

class MyClass2 {

var someProperty = 0

init() {
// Weakly referenced
test.subscribe { [weak self] in
self?.update()
}
}

func update() {
self.someProperty += 1
}
}

MyClass2()

但是,如果我像这样将闭包作为函数参数传递,还需要这样做吗?

class MyClass2 {

var someProperty = 0

init() {
// Avoid retain cycle?
test.subscribe(using: update)
}

func update() {
self.someProperty += 1
}
}

最佳答案

你的问题的整个前提(“但是那个闭包必须使用弱引用”)是错误的。从来没有任何理由在您的第一个代码中使用 weak self。这是完全合理的:

init() {
test.subscribe {
self.update()
}
}

需要使用 weak self 的原因是引用 self 的闭包本身 self 保留,导致保留周期;但这并没有发生在这里。

关于swift - 通过使用函数参数类型来避免弱引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43624789/

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