Junior — Middle
Qachonki yopilish (closure) ichida zaif (weak) havolani qo'llash kerak?
sobes.tech AI
AIdan javob
iOS ichida yopilishlar (closures) ichida zaif (weak) referenslar kuchli (strong) referens aylanishlarini (retain cycles) oldini olish uchun ishlatiladi, bu esa xotira oqib ketishiga olib kelishi mumkin. Bu odatda, yopilish ob'ektni (masalan, self) ushlasa va bu ob'ekt tomonidan saqlansa, ikki tomonlama kuchli referenslar hosil bo'ladi.
Yopilish ichida self ga murojaat qilish uchun weak dan foydalaning, agar yopilish ob'ektning xususiyatida saqlansa yoki funksiya chaqiruvidan ko'proq yashay oladigan bo'lsa, ob'ektni xotirada ushlab qolishni oldini olish uchun.
Swiftda misol:
class ViewController {
var completion: (() -> Void)?
func setup() {
completion = { [weak self] in
guard let self = self else { return }
self.doSomething()
}
}
func doSomething() {
print("Harakat bajarildi")
}
}
Bu yerda, [weak self] ViewController va completion yopilishi o'rtasidagi kuchli aylanishni oldini oladi.