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.