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.