Was ist unowned im Kontext von Swift?
sobes.tech KI
Antwort von AI
Unowned bezieht sich auf die automatische Speicherverwaltung in Swift (ARC). Unowned-Referenzen werden verwendet, um starke Referenzzyklen zu vermeiden, wenn zwei Objekte sich gegenseitig stark referenzieren. Eine unowned-Referenz erhöht nicht den Referenzzähler des Objekts. Im Gegensatz zu einer weak-Referenz wird erwartet, dass eine unowned-Referenz immer auf eine bestehende Instanz zeigt; wenn die referenzierte Instanz freigegeben wird, führt der Zugriff darauf zu einem Laufzeitfehler. Es wird verwendet, wenn der Lebenszyklus des verbundenen Objekts mit dem des umgebenden Objekts übereinstimmt oder länger ist.
Beispiel:
class Department {
var name: String
var courses: [Course] = []
init(name: String) {
self.name = name
print("\(name) Abteilung wird initialisiert")
}
deinit {
print("\(name) Abteilung wird deinitialisiert")
}
}
class Course {
var name: String
unowned var department: Department // Unowned schwache Referenz
init(name: String, department: Department) {
self.name = name
self.department = department
print("\(name) Kurs wird initialisiert")
}
deinit {
print("\(name) Kurs wird deinitialisiert")
}
}
var accounting: Department? = Department(name: "Accounting")
var introToAccounting: Course? = Course(name: "Introduction to Accounting", department: accounting!)
accounting!.courses.append(introToAccounting!)
accounting = nil // Jetzt kann das Department-Objekt freigegeben werden
introToAccounting = nil // Jetzt kann das Course-Objekt freigegeben werden
In diesem Beispiel hat Course eine unowned-Referenz auf Department. Da Course ohne Department nicht existieren kann (logisch), und Department den Lebenszyklus von Course über das Array courses verwaltet, ist die Verwendung von unowned hier angemessen. Dies verhindert einen starken Referenzzyklus zwischen accounting und introToAccounting. Wenn accounting auf nil gesetzt wird, wird das Department-Objekt freigegeben, und anschließend wird auch das Course-Objekt freigegeben, da keine starken Referenzen mehr auf es bestehen.