Junior — Middle
Swift'da yopiq (closure) ichida weak self ni ishlatish kerak bo'lgan holatga misol keltira olasizmi? Tsiklik havolalarni oldini olish uchun.
sobes.tech AI
AIdan javob
Swiftda siklik referans, ob'ekt o'zini yopiqda ushlash va bu yopiq shu ob'ektda saqlanadigan bo'lsa, bu ikki ob'ekt bir-birini ushlab turib, xotira oqib ketishiga olib keladi. Buning oldini olish uchun weak self ishlatiladi.
Misol: sizda ViewController sinfi bor va u asinxron operatsiyani yopiq bilan boshlaydi. Agar yopiqda self to'g'ridan-to'g'ri ishlatilsa, ViewController yopiq tomonidan ushlab turiladi va yopilishdan keyin ozod qilinmaydi.
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) {
// interfeysni yangilash
}
}
Bu yerda, weak self kuchli siklik bog'lanishni oldini oladi, chunki yopiq selfni zaif ushlab turadi va ob'ektni ushlab qolmaydi, bu esa uni ozod qilish imkonini beradi.