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.