Sobes.tech
Junior — Middle

Mi a különbség az 'unowned' és a 'strong' kulcsszavak használata között Swiftben történő hivatkozások deklarálásakor?

sobes.tech MI

Válasz az MI-től

Swiftben a strong és unowned kulcsszavakat referenciák kezelésére és a tartási ciklusok (retain cycles) megelőzésére használják.

  • strong — ez egy alapértelmezett erős hivatkozás, amely növeli az objektum referencsszámát. Amíg legalább egy erős hivatkozás létezik, az objektum nem kerül törlésre a memóriából.

  • unowned — ez egy gyenge, de nem opcionális hivatkozás. Nem növeli a referencsszámot, de feltételezi, hogy a hivatkozott objektum mindig létezik a használat során. Ha az objektum már törlésre került, az unowned hivatkozás elérése futási hibát eredményez.

Példa:

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

Itt az tenant unowned-ként van deklarálva, mert a lakásnak nem szabad erős hivatkozással tartania a személyt, hogy elkerüljék a ciklust, de feltételezzük, hogy a személy hosszabb ideig létezik, mint a lakás.