Sobes.tech
Junior — Middle

Можете ли да обясните какво означава използването на слаба препратка към self в closures?

sobes.tech AI

Отговор от AI

Използването на слаб препратка (weak reference) към self в затварянията в iOS (Swift) помага да се избегнат цикли на задържане (retain cycles), които водят до течове на памет. Когато затваряне улавя self като силна препратка, и self съдържа това затваряне, те се задържат взаимно, и паметта не се освобождава.

Пример:

class MyClass {
    var closure: (() -> Void)?

    func setup() {
        closure = { [weak self] in
            guard let self = self else { return }
            self.doSomething()
        }
    }

    func doSomething() {
        print("Action")
    }
}

Тук [weak self] означава, че вътре в затварянето self ще бъде слаба препратка, и ако обектът бъде унищожен, препратката ще стане nil, предотвратявайки течове на памет.