Sobes.tech
Junior — Middle

Kunnen situaties die verband houden met het gebruik van zwakke (unowned) referenties leiden tot een crash van de applicatie? Geef een voorbeeld.

sobes.tech AI

Antwoord van AI

Ja, het gebruik van zwakke (unowned) referenties in Swift kan leiden tot een crash van de applicatie als het object waarnaar de unowned referentie verwijst al is vrijgegeven en later wordt geprobeerd toegang te krijgen tot die referentie.

Unowned referenties gaan ervan uit dat het object altijd bestaat zolang de referentie leeft. Als dat niet het geval is, zal de applicatie crashen met een fout "EXC_BAD_ACCESS".

Voorbeeld:

class Person {
    var apartment: Apartment?
}

class Apartment {
    unowned let tenant: Person
    init(tenant: Person) {
        self.tenant = tenant
    }
}

var john: Person? = Person()
john!.apartment = Apartment(tenant: john!)

john = nil // het Person-object wordt vrijgegeven

// Nu is apartment.tenant een unowned referentie naar een al vrijgegeven object
// Toegang daartoe zal leiden tot een crash
print(john!.apartment!.tenant) // crash

Om dergelijke crashes te voorkomen, moet je ervoor zorgen dat de unowned referentie niet wordt gebruikt nadat het object is vrijgegeven, of gebruik weak referenties die nil worden na het vrijgeven van het object.