Sobes.tech
Junior — Middle

Yönetilen ortamlarda döngüsel referanslara sahip nesnelerin belleği nasıl serbest bırakılır?

sobes.tech yapay zeka

AI'dan gelen yanıt

Yönetilen ortamlarda, örneğin ARC (Otomatik Referans Sayımı) ile iOS'ta, döngüsel referanslara sahip nesnelerin bellek serbest bırakılması otomatik olarak gerçekleşmez, çünkü ARC referans döngülerini kıramaz.

Bu sorunu çözmek için, nesnenin referans sayısını artırmayan zayıf (weak) ve sahip olmayan (unowned) referanslar kullanılır. Bu, döngüleri kırmaya ve belleği doğru şekilde serbest bırakmaya olanak tanır.

Örnek:

class Person {
    var name: String
    weak var apartment: Apartment? // zayıf referans

    init(name: String) {
        self.name = name
    }
}

class Apartment {
    let unit: String
    unowned let tenant: Person // sahip olmayan referans

    init(unit: String, tenant: Person) {
        self.unit = unit
        self.tenant = tenant
    }
}

Burada, Person ve Apartment birbirine referans verir, ancak bir referans zayıftır, bu da bellek sızıntılarını önler.

Referans döngüleri kırılmazsa, nesneler dış referanslar olmasa bile bellekte kalır ve bu da bellek sızıntılarına yol açar.