Sobes.tech
Junior — Middle

Boshqariladigan muhitlarda siklik bog'langan obyektlar uchun xotira qanday bo'shatiladi?

sobes.tech AI

AIdan javob

Boshqariladigan muhitlarda, masalan, iOS ARC (Avtomatik Referenslar Hisobi) bilan, siklik bog‘liqliklarga ega obyektlar uchun xotira bo‘shatilishi avtomatik ravishda amalga oshmaydi, chunki ARC referenslar siklini uzolmaydi.

Ushbu muammoni hal qilish uchun, zaif (weak) va mulk egasi bo‘lmagan (unowned) referenslar ishlatiladi, ular obyektning referenslar hisobini oshirmaydi. Bu sikllarni uzishga va xotirani to‘g‘ri bo‘shatishga imkon beradi.

Misol:

class Person {
    var name: String
    weak var apartment: Apartment? // zaif referens

    init(name: String) {
        self.name = name
    }
}

class Apartment {
    let unit: String
    unowned let tenant: Person // mulk egasi bo‘lmagan referens

    init(unit: String, tenant: Person) {
        self.unit = unit
        self.tenant = tenant
    }
}

Bu yerda, Person va Apartment bir-biriga murojaat qiladi, lekin biri zaif, bu esa xotira oqib ketishini oldini oladi.

Agar referenslar sikli uzilmasa, obyektlar tashqi referenslar bo‘lmasdan ham xotirada qoladi, bu esa xotira oqib ketishiga olib keladi.