Junior — Middle
В кои случаи трябва да използвате слаба (weak) препратка вътре в затваряне (closure)?
sobes.tech AI
Отговор от AI
Слабите препратки (weak) вътре в затварянията в iOS се използват за предотвратяване на цикли на силни препратки (retain cycles), които могат да доведат до течове на памет. Обикновено това е важно, когато затварянето улавя обект (например, self) и се задържа от този обект, създавайки взаимна силна препратка.
Използвайте weak, за да се позовавате на self вътре в затварянето, ако затварянето се съхранява като свойство на обекта или може да живее по-дълго от извикването на функцията, за да избегнете задържане на обекта в паметта след освобождаването му.
Пример на Swift:
class ViewController {
var completion: (() -> Void)?
func setup() {
completion = { [weak self] in
guard let self = self else { return }
self.doSomething()
}
}
func doSomething() {
print("Действието е изпълнено")
}
}
Тук [weak self] предотвратява силен цикъл между ViewController и затварянето completion.