Sobes.tech
Junior — Middle

Qanday qilib referens turidan foydalanib yaratilgan ob'ektlarning xotirasi bo'shatiladi?

sobes.tech AI

AIdan javob

iOS-da, referans tiplari bilan yaratilgan obyektlar (masalan, Swift yoki Objective-C-dagi sinflar) avtomatik Referenslar hisoblash tizimi (ARC — Automatic Reference Counting) tomonidan boshqariladi. Har bir obyekt unga aktiv referenslar sonini saqlaydi. Yangi referens obyektga yaratilganda, hisoblagich oshadi, va referens foydalanilmay qolganida (masalan, o'zgaruvchi doirasidan chiqsa yoki nil ga tayinlansa), hisoblagich kamayadi.

Obyektning referenslar hisoblagichi nolga yetganda, bu unga hech kim murojaat qilmayotgani va obyekt tomonidan egallangan xotira avtomatik ravishda bo'shatiladi. Bu xotira oqib ketishining oldini olishga yordam beradi, qo'lda boshqarishsiz.

Swift misoli:

class Person {
    var name: String
    init(name: String) {
        self.name = name
    }
    deinit {
        print("Shaxs \(name) bo'shatildi")
    }
}

var p1: Person? = Person(name: "Ivan")
var p2 = p1 // referenslar soni oshdi
p1 = nil // soni kamaydi, lekin obyekt hali yashaydi
p2 = nil // soni 0 ga yetdi, obyekt bo'shatildi

Ikki obyekt bir-biriga murojaat qilganda, xotira oqib ketishining oldini oladigan siklik referenslar (retain cycles) yuzaga kelishi mumkin. Buning oldini olish uchun, zaif (weak) yoki muloyim (unowned) referenslar ishlatiladi.