Sobes.tech
Junior — Middle

Можеш ли да дадеш пример кога в затваряне в Swift трябва да използваш weak self, за да предотвратиш циклични препратки?

sobes.tech AI

Отговор от AI

В Swift възниква циклична референция, когато обект заснема себе си в затваряне, а това затваряне се съхранява в същия обект, което води до взаимно задържане и изтичане на памет. За да се избегне това, се използва weak self.

Пример: имате клас ViewController, който стартира асинхронна операция с затваряне. Ако в затварянето използвате self директно, тогава ViewController ще бъде задържан от затварянето и няма да бъде освободен след затварянето.

class ViewController: UIViewController {
    func fetchData() {
        networkRequest { [weak self] data in
            guard let self = self else { return }
            self.updateUI(with: data)
        }
    }

    func updateUI(with data: Data) {
        // актуализиране на интерфейса
    }
}

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