Sobes.tech
Middle

Tullantı toplayıcı (garbage collector) və avtomatik yaddaş idarəetməsi (ARC) arasındakı fərq nədir?

sobes.tech Süni İntellekt

AI-dan cavab

Tullantı toplayıcı avtomatik ravishda dastur tomonidan endi ishlatilmaydigan xotirani 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 referans 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