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.