Referans tipi kullanılarak oluşturulan nesnelerin belleği nasıl serbest bırakılır?
sobes.tech yapay zeka
AI'dan gelen yanıt
iOS'ta, referans tipleri kullanılarak oluşturulan nesneler (örneğin, Swift veya Objective-C'deki sınıfler) otomatik Referans Sayımı (ARC) sistemi tarafından yönetilir. Her nesne, ona aktif referansların sayısını tutan bir referans sayacı içerir. Nesneye yeni bir referans oluşturulduğunda, sayaç artar ve referans kullanılmaz hale geldiğinde (örneğin, bir değişken kapsam dışına çıkarsa veya nil'e atanırsa), sayaç azalır.
Bir nesnenin referans sayacı sıfıra ulaştığında, artık ona referans kalmadığı anlamına gelir ve nesnenin kapladığı bellek otomatik olarak serbest bırakılır. Bu, manuel yönetim olmadan bellek sızıntılarını önlemeye yardımcı olur.
Swift'te örnek:
class Person {
var name: String
init(name: String) {
self.name = name
}
deinit {
print("Kişi \(name) serbest bırakıldı")
}
}
var p1: Person? = Person(name: "Ivan")
var p2 = p1 // referans sayısı arttı
p1 = nil // sayacı azaldı, ancak nesne hâlâ canlı
p2 = nil // sayaç 0 oldu, nesne serbest bırakıldı
İki nesne birbirine referans verdiğinde, bellek serbest bırakılmasını engelleyen döngüsel referanslar (retain cycles) oluşabilir. Bu durumu önlemek için weak veya unowned referanslar kullanılır.