Wie wird die Speicherverwaltung für Referenztypen in Swift durchgeführt?
sobes.tech KI
Antwort von AI
In Swift wird die Speicherverwaltung für Referenztypen (Klassen) durch automatische Referenzzählung (ARC, Automatic Reference Counting) durchgeführt. Jedes Objekt im Heap führt einen Referenzzähler: die Anzahl der aktiven Referenzen auf dieses Objekt. Wenn eine neue Referenz auf ein Objekt erstellt wird, erhöht sich der Zähler, und wenn die Referenz nicht mehr verwendet wird, verringert er sich. Wenn der Zähler null erreicht, wird das Objekt automatisch aus dem Speicher entfernt.
Beispiel:
class Person {
var name: String
init(name: String) {
self.name = name
}
}
var a: Person? = Person(name: "Alice") // Zähler = 1
var b = a // Zähler = 2
b = nil // Zähler = 1
a = nil // Zähler = 0, Objekt wird gelöscht
Es ist wichtig, zyklische Referenzen (retain cycles) zu vermeiden, bei denen zwei Objekte sich gegenseitig referenzieren, was die Freigabe des Speichers verhindert. Dafür werden schwache (weak) und unbesitzende (unowned) Referenzen verwendet.
Werttypen (Strukturen, Aufzählungen) werden im Stack gespeichert und beim Zuweisen kopiert, daher wird ARC bei ihnen nicht angewendet.