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 и не задържа обекта, позволявайки му да бъде освободен.