Sobes.tech
Junior — Middle

Was ist der Unterschied zwischen der Verwendung der Schlüsselwörter 'unowned' und 'strong' bei der Deklaration von Referenzen in Swift?

sobes.tech KI

Antwort von AI

In Swift werden die Schlüsselwörter strong und unowned verwendet, um Referenzen zu verwalten und Retain Cycles zu verhindern.

  • strong — ist eine Standard-Stärke-Referenz, die den Referenzzähler des Objekts erhöht. Solange mindestens eine starke Referenz besteht, wird das Objekt nicht aus dem Speicher entfernt.

  • unowned — ist eine schwache, aber nicht optionale Referenz. Sie erhöht den Referenzzähler nicht, geht aber davon aus, dass das referenzierte Objekt während der Nutzung dieser Referenz immer existiert. Wenn das Objekt bereits entfernt wurde, führt der Zugriff auf die unowned-Referenz zu einem Laufzeitfehler.

Beispiel:

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 ist tenant als unowned deklariert, weil die Wohnung die Person nicht mit einer starken Referenz halten soll, um einen Zyklus zu vermeiden, aber angenommen wird, dass die Person länger existiert als die Wohnung.