Sobes.tech
Junior — Middle

Použili ste vo svojich projektoch referenčné premenné typu Unowned?

sobes.tech AI

Odpoveď od AI

Áno, v iOS projektoch som používal referenčné premenné typu unowned.

unowned je typ slabého odkazu, ktorý nezvyšuje čítač odkazov, ale predpokladá, že odkazovaný objekt bude vždy existovať počas používania tejto referencie.

Toto je užitočné na prevenciu cyklov silných odkazov, napríklad v uzávierkach alebo pri vzájomných odkazoch medzi objektmi, keď jeden objekt zaručuje, že bude žiť dlhšie ako iný.

Príklad použitia unowned v uzávierke:

class Person {
    let name: String
    var apartment: Apartment?
    
    init(name: String) {
        self.name = name
    }
}

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

let john = Person(name: "John")
let apt = Apartment(unit: "4A", tenant: john)
john.apartment = apt

Tu, tenant je deklarovaný ako unowned, pretože byt nemá existovať bez nájomníka, čím sa zabraňuje cyklu silných odkazov.