我遇到了Swift Memory Management: Storing func in var中的類似問題,但這並未解決我的問題。Swift將var函數賦值給var導致保留週期?
這裏是我的類定義:
class Test {
var block: (() -> Int)?
func returnInt() -> Int {
return 1
}
deinit {
print("Test deinit")
}
}
我嘗試了兩種方式來分配價值block
財產,得到了完全不同的結果。第二種方法沒有造成保留圈,這是相當出人意料:
var t = Test()
// This will lead to retain cycle
// t.block = t.returnInt
// I thought this will also lead to retain cycle but actually didn't
t.block = {
return t.returnInt()
}
t = Test()
在我看來,變量t
由block
而block
是t
屬性捕獲,所以任何人都可以解釋爲什麼沒有一個保留週期?
有趣的是,如果你不重新分配't'到別的東西,只是讓它掉下來的範圍,但它像一個強參考週期,除非您在''中包含'[無主t]'或''中的[弱t] – Rob