Sobes.tech
Junior — Middle

Wat is het verschil tussen het gebruik van de sleutelwoorden 'unowned' en 'strong' bij het declareren van referenties in Swift?

sobes.tech AI

Antwoord van AI

In Swift worden de sleutelwoorden strong en unowned gebruikt om referenties te beheren en retentiecirkels (retain cycles) te voorkomen.

  • strong — dit is een standaard sterke referentie die de referentieteller van het object verhoogt. Zolang er ten minste één sterke referentie bestaat, wordt het object niet uit het geheugen verwijderd.

  • unowned — dit is een zwakke, maar niet optionele referentie. Het verhoogt de referentieteller niet, maar gaat ervan uit dat het object waarnaar wordt verwezen altijd bestaat tijdens het gebruik van deze referentie. Als het object al is verwijderd, zal toegang tot de unowned-referentie een runtime-fout veroorzaken.

Voorbeeld:

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

Hier is tenant gedeclareerd als unowned omdat het appartement de persoon niet met een sterke referentie mag vasthouden om een cyclus te voorkomen, maar wordt aangenomen dat de persoon langer bestaat dan het appartement.