Sobes.tech
Junior — Middle

Heeft u in uw projecten referentievariabelen van het type Unowned gebruikt?

sobes.tech AI

Antwoord van AI

Ja, in iOS-projecten heb ik referentiële variabelen van het type unowned gebruikt.

unowned is een soort zwakke referentie die de referentieteller niet verhoogt, maar ervan uitgaat dat het object waarnaar wordt verwezen altijd zal bestaan tijdens het gebruik van deze referentie.

Dit is handig om sterke referentiecycli te voorkomen, bijvoorbeeld in closures of bij onderlinge verwijzingen tussen objecten, wanneer één object garandeert dat het langer zal leven dan een ander.

Voorbeeld van het gebruik van unowned in een closure:

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

Hier ist tenant als unowned deklariert, weil die Wohnung ohne Mieter nicht existieren sollte, was eine zyklische starke Referenz verhindert.