Sobes.tech
Junior — Middle

Kannst du ein Beispiel nennen, wann in einer Closure in Swift weak self verwendet werden muss, um zyklische Referenzen zu vermeiden?

sobes.tech KI

Antwort von AI

In Swift tritt eine zyklische Referenz auf, wenn ein Objekt eine Referenz auf sich selbst in einer Closure erfasst, und diese Closure im selben Objekt gespeichert wird, was zu gegenseitigem Halten und einem Speicherleck führt. Um dies zu vermeiden, verwendet man weak self.

Beispiel: Sie haben eine Klasse ViewController, die eine asynchrone Operation mit einer Closure startet. Wenn in der Closure self direkt verwendet wird, wird ViewController durch die Closure gehalten und nach dem Schließen nicht freigegeben.

class ViewController: UIViewController {
    func fetchData() {
        networkRequest { [weak self] data in
            guard let self = self else { return }
            self.updateUI(with: data)
        }
    }

    func updateUI(with data: Data) {
        // UI-Aktualisierung
    }
}

Hier verhindert weak self eine starke zyklische Referenz, da die Closure self schwach erfasst und das Objekt nicht hält, was eine Freigabe ermöglicht.