Middle
Wie kann man Objekte von Klassen in einem Array durch eine starke Referenz speichern?
sobes.tech KI
Antwort von AI
Klassenobjekte in einem Array werden in Swift standardmäßig durch starke Referenzen gespeichert, wenn das Array Elemente vom Klassentyp enthält. Ein Array [MyClass] oder Array<MyClass> enthält starke Referenzen auf die Instanzen von MyClass.
Beispiel:
class MyClass {
let id: Int
init(id: Int) {
self.id = id
print("MyClass \(id) erstellt")
}
deinit {
print("MyClass \(id) freigegeben")
}
}
var starkReferenzArray: [MyClass] = []
for i in 0..<3 {
let obj = MyClass(id: i)
starkReferenzArray.append(obj) // Das Array hält starke Referenzen
}
print("Array hat \(starkReferenzArray.count) Elemente")
// Objekte werden nicht deallokiert, solange starke Referenzen im Array bestehen
// Zuweisung `nil` an das Array oder Entfernen von Elementen führt zur Freigabe,
// wenn keine anderen starken Referenzen existieren.
// starkReferenzArray = [] // Beispiel zum Freigeben aller starken Referenzen
// starkReferenzArray.remove(at: 0) // Beispiel zum Freigeben einer einzelnen starken Referenz
In Swift speichern Arrays von Werttypen (struct) oder Enumerationen (enum) Kopien ihrer Elemente. Wenn das Array jedoch Instanzen von Klassen (class) enthält, speichert es starke Referenzen auf diese Instanzen.