Junior — Middle
Ilovalar dasturlarida xotira oqib chiqishining paydo bo'lishiga nima sabab bo'ladi?
sobes.tech AI
AIdan javob
Dasturlardagi xotira oqishi, ob'ektlar yoki ma'lumotlar uchun ajratilgan xotira kerak bo'lib qolganidan keyin bo'shatilmasa yuzaga keladi. iOSda bu ko'pincha:
- Ob'ektlar o'rtasidagi tsiklik referensiyalar (saqlash sikllari), ayniqsa ARC (Avtomatik Referenslar Hisobi) ishlatilganda. Masalan, ikki ob'ekt bir-biriga kuchli referenslar bilan murojaat qilsa, ular bo'shatilmaydi.
- Selfni kuchli referens bilan egallagan yopilishlar (closures) noto'g'ri ishlatilishi.
- Vaqtinchalik taymerlar, kuzatuvchilar yoki fayl deskriptorlarini bo'shatmaslik.
Yopilish bilan saqlash sikli misoli:
class ViewController {
var closure: (() -> Void)?
func setup() {
closure = {
print(self) // self kuchli egallanadi, sikl hosil qiladi
}
}
}
Qoldiqlarni oldini olish uchun, yopilishlarda zaif (weak) yoki egalik qilmaydigan (unowned) referensiyalar ishlatiladi va ob'ektlarning hayot aylanishini to'g'ri boshqarish ta'minlanadi.