Swift 通过使用函数参数类型避免弱引用?
我有一个函数,它接受一个块作为参数。我可以使用尾随闭包传递代码块,但在保留Swift 通过使用函数参数类型避免弱引用?,swift,memory-leaks,automatic-ref-counting,retain-cycle,Swift,Memory Leaks,Automatic Ref Counting,Retain Cycle,我有一个函数,它接受一个块作为参数。我可以使用尾随闭包传递代码块,但在保留self时,该闭包必须使用weak引用 例如,请参见MyClass2的初始值设定项: class MyClass { func subscribe(using block: @escaping () -> Void) { DispatchQueue.global().async { block() } } } let test = MyClas
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
}
}
你的问题的整个前提(“但闭包必须使用弱引用”)是错误的。在你的第一个代码中从来没有任何理由使用
弱自我
。这是完全合理的:
init() {
test.subscribe {
self.update()
}
}
需要使用弱self
的原因是引用self
的闭包本身被self
保留,导致保留周期;但这在这里并没有发生