Sobes.tech
Middle

Swift'te referansal tipler için bellek yönetimi nasıl yapılır?

sobes.tech yapay zeka

AI'dan gelen yanıt

Swift'te, referans tipleri (sınıflar) için bellek yönetimi, otomatik referans sayımı (ARC, Automatic Reference Counting) ile gerçekleştirilir. Heap'teki her nesne, bir referans sayacı tutar: bu nesneye aktif referansların sayısı. Yeni bir referans oluşturulduğunda sayaç artar, ve referans kullanılmaz hale geldiğinde azalır. Sayaç sıfıra ulaştığında, nesne otomatik olarak bellekten silinir.

Örnek:

class Person {
    var name: String
    init(name: String) {
        self.name = name
    }
}

var a: Person? = Person(name: "Alice") // sayaç = 1
var b = a                             // sayaç = 2
b = nil                              // sayaç = 1
a = nil                              // sayaç = 0, nesne silinir

İki nesne birbirine referans verdiğinde, bellek serbest bırakmayı engelleyen döngüsel referanslar (retain cycles) oluşmaması önemlidir. Bunun için zayıf (weak) ve sahip olmayan (unowned) referanslar kullanılır.

Değer tipleri (yapılar, enumlar) yığında saklanır ve atama sırasında kopyalanır, bu nedenle ARC bunlara uygulanmaz.