Sobes.tech
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.