Sobes.tech
Junior — Middle

Können Situationen im Zusammenhang mit der Verwendung von schwachen (unowned) Referenzen zu einem Absturz der Anwendung führen? Geben Sie ein Beispiel.

sobes.tech KI

Antwort von AI

Ja, die Verwendung von schwachen (unowned) Referenzen in Swift kann dazu führen, dass die Anwendung abstürzt, wenn das Objekt, auf das sich die unbesitzende Referenz bezieht, bereits freigegeben wurde und später auf diese Referenz zugegriffen wird.

Unbesitzende Referenzen gehen davon aus, dass das Objekt immer existiert, solange die Referenz lebt. Wenn dies nicht der Fall ist, stürzt die Anwendung mit einem Fehler "EXC_BAD_ACCESS" ab.

Beispiel:

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 // das Person-Objekt wird freigegeben

// Jetzt ist apartment.tenant eine unbesitzende Referenz auf ein bereits freigegebenes Objekt
// Der Zugriff darauf führt zu einem Absturz
print(john!.apartment!.tenant) // Absturz

Um solche Abstürze zu vermeiden, muss man sicherstellen, dass die unbesitzende Referenz nicht nach der Freigabe des Objekts verwendet wird, oder schwache Referenzen verwenden, die nach der Freigabe des Objekts nil werden.