Sobes.tech
Junior — Middle

Használtál már Unowned típusú referencia változókat a projektjeidben?

sobes.tech MI

Válasz az MI-től

Igen, iOS projektekben használtam unowned típusú referencia változókat.

Az unowned egy gyenge referencia típus, amely nem növeli a referencia számlálót, de feltételezi, hogy a referencia által hivatkozott objektum mindig létezni fog a használat során.

Ez hasznos a erős referencia ciklusok megelőzésében, például zárványokban vagy kölcsönös hivatkozások esetén objektumok között, amikor az egyik objektum garantálja, hogy hosszabb ideig él, mint a másik.

Az unowned használatának példája:

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

Itt, a tenant unowned-ként van deklarálva, mivel a lakásnak nem szabad léteznie bérlő nélkül, és ez megakadályozza az erős referencia ciklust.