Sobes.tech
Middle

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.