Sobes.tech
Middle

Çöp toplayıcı (garbage collector) ile otomatik bellek yönetimi (ARC) arasındaki fark nedir?

sobes.tech yapay zeka

AI'dan gelen yanıt

Çöp toplayıcı, artık program tarafından kullanılmayan belleği otomatik olarak bulur ve serbest bırakır. Arka planda çalışır, yığını periyodik olarak tarar ve aktif referanslara sahip olmayan nesneleri tanımlar.

Swift ve Objective-C'de ARC (Otomatik Referans Sayımı), nesnelerin yaşamını, her nesneye güçlü referansların sayısını sayarak yönetir. Güçlü referans sayısı sıfıra ulaştığında, ARC otomatik olarak bu nesnenin kapladığı belleği serbest bırakır.

Ana farklar:

Özellik Çöp Toplayıcı ARC
Çalışma Prensibi Ulaşılmaz nesneleri bulma Güçlü referans sayımını yapma
Serbest bırakma anı Belirsiz, tarama sırasında Belirli, sayacın 0 olmasıyla
Ek maliyetler Program duraklamaları (toplama sırasında) Az, sayaç değişikliklerinde
Tahmin edilebilirlik Düşük Yüksek
Döngüsel referanslar Özel yaklaşımlar gerektirir (örneğin, zayıf referanslar) weak veya unowned referansların kullanımı gerekir
iOS'ta kullanımı Modern Objective-C ve Swift'te yok Objective-C ve Swift'te ana bellek yönetimi mekanizması

ARC'de güçlü referans döngülerini önlemek için weak kullanımı örneği:

class Person {
    let name: String
    var apartment: Apartment? // güçlü referans

    init(name: String) {
        self.name = name
        print("\(name) başlatılıyor")
    }
    deinit {
        print("\(name) yok ediliyor")
    }
}

class Apartment {
    let unit: String
    weak var tenant: Person? // zayıf referans

    init(unit: String) {
        self.unit = unit
        print("Daire \(unit) başlatılıyor")
    }
    deinit {
        print("Daire \(unit) yok ediliyor")
    }
}

var john: Person?
var unit4A: Apartment?

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

john!.apartment = unit4A
unit4A!.tenant = john // zayıf referans döngüyü engeller

john = nil // Person nesnesi yok edilir
unit4A = nil // Apartment nesnesi yok edilir