Sobes.tech
Middle

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.