Sobes.tech
Junior — Middle

Swift'te referanslar tanımlarken 'unowned' ve 'strong' anahtar kelimelerinin kullanımı arasındaki fark nedir?

sobes.tech yapay zeka

AI'dan gelen yanıt

Swift'te strong ve unowned anahtar kelimeleri, referansları yönetmek ve retain cycle'ları önlemek için kullanılır.

  • strong — bu, nesnenin referans sayacını artıran standart güçlü bir referanstır. En az bir güçlü referans olduğu sürece, nesne bellekten silinmez.

  • unowned — zayıf, ancak opsiyonel olmayan bir referanstır. Referans sayacını artırmaz, ancak bu referansın kullanıldığı süre boyunca referans verilen nesnenin her zaman var olduğunu varsayar. Nesne zaten silinmişse, unowned referansa erişmek çalışma zamanında hata verir.

Örnek:

class Person {
    var apartment: Apartment?
}

class Apartment {
    unowned let tenant: Person
    init(tenant: Person) {
        self.tenant = tenant
    }
}

let john = Person()
let apt = Apartment(tenant: john)
john.apartment = apt

Burada, tenant unowned olarak ilan edilmiştir çünkü daire, kişiyi güçlü bir referansla tutmamalıdır, böylece döngü önlenir, ancak kişinin daireden daha uzun süre var olduğu varsayılır.