Sobes.tech
Middle

Qayta ishlash to'plovchi (garbage collector) va avtomatik xotira boshqaruvi (ARC) o'rtasidagi farq nima?

sobes.tech AI

AIdan javob

Qayta tozalash mashinasi dastur tomonidan endi ishlatilmaydigan xotirani avtomatik ravishda topadi va bo'shatadi. U fon rejimida ishlaydi, doimiy ravishda to'plamni skaner qiladi va faol bo'lmagan ob'ektlarni aniqlaydi.

ARC (Avtomatik Referenslar Hisoblagichi) Swift va Objective-C da ob'ektlarning hayotini boshqaradi, har bir ob'ektga kuchli referenslar sonini hisoblab chiqadi. Kuchli referenslar soni nolga teng bo'lsa, ARC avtomatik ravishda bu ob'ekt tomonidan egallangan xotirani bo'shatadi.

Asosiy farqlar:

Xususiyat Qayta tozalash mashinasi ARC
Ishlash prinsipi Erishilmaydigan ob'ektlarni qidirish Kuchli referenslar hisoblash
Bo'shatish vaqti Noaniq, skanerlash paytida Aniq, soni 0 ga teng bo'lsa
Qo'shimcha xarajatlar Dastur bajarilishida to'xtashlar (to'plam paytida) Minimal, hisoblagich o'zgarganda
Bashorat qilish Past Yuqori
Siklli referenslar Maxsus yondashuvlarni talab qiladi (masalan, zaif referenslar) weak yoki unowned referenslardan foydalanishni talab qiladi
iOSda foydalanish Zamonaviy Objective-C va Swiftda mavjud emas Objective-C va Swiftda asosiy xotira boshqarish mexanizmi

ARC da kuchli referens sikllarini oldini olish uchun weak dan foydalanish misoli:

class Person {
    let name: String
    var apartment: Apartment? // kuchli referens

    init(name: String) {
        self.name = name
        print("\(name) boshlanmoqda")
    }
    deinit {
        print("\(name) tugatilmoqda")
    }
}

class Apartment {
    let unit: String
    weak var tenant: Person? // zaif referens

    init(unit: String) {
        self.unit = unit
        print("Xonadon \(unit) boshlanmoqda")
    }
    deinit {
        print("Xonadon \(unit) tugatilmoqda")
    }
}

var john: Person?
var unit4A: Apartment?

john = Person(name: "John Appleseed")
unit4A = Apartment(unit: "4A")

john!.apartment = unit4A
unit4A!.tenant = john // zaif referens siklni oldini oladi

john = nil // Person ob'ekti tugatiladi
unit4A = nil // Apartment ob'ekti tugatiladi