Swift'da referens turlar uchun xotira boshqaruvi qanday amalga oshiriladi?
sobes.tech AI
AIdan javob
Swiftda, referens tiplari (sinflar) uchun xotira boshqaruvi avtomatik referens hisoblash (ARC, Automatic Reference Counting) yordamida amalga oshiriladi. Har bir obyekt heapda referenslar hisobini tutadi: bu obyektga faol referenslar soni. Yangi referens yaratilganda, hisob oshadi, va referens ishlatilmay qolganida, kamayadi. Hisob nolga teng bo'lsa, obyekt avtomatik ravishda xotiradan o'chiriladi.
Misol:
class Person {
var name: String
init(name: String) {
self.name = name
}
}
var a: Person? = Person(name: "Alice") // hisob = 1
var b = a // hisob = 2
b = nil // hisob = 1
a = nil // hisob = 0, obyekt o'chiriladi
Ikki obyekt bir-biriga murojaat qilganda, xotira bo'shatilishini to'xtatadigan siklik referenslar (retain cycles) oldini olish muhimdir. Buning uchun, zaif (weak) va mulk egasi bo'lmagan (unowned) referenslar ishlatiladi.
Qiymat turlari (tuplar, enumlar) stackda saqlanadi va tayinlashda nusxa olinadi, shuning uchun ARC ularga ta'sir qilmaydi.