Я встретил аналогичный вопрос в Swift Memory Management: Storing func in 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' к чему-то еще и просто позволить ей выпасть из сферы, она ведет себя подобно сильный ссылочный цикл, если вы не включили '[unowned t] in' или' [weak t] in' ... – Rob