Sobes.tech
Junior — Middle

Kun je een voorbeeld geven van wanneer je in een closure in Swift weak self moet gebruiken om cyclische verwijzingen te voorkomen?

sobes.tech AI

Antwoord van AI

In Swift ontstaat een cyclische verwijzing wanneer een object zichzelf vastlegt in een closure, en die closure wordt opgeslagen in hetzelfde object, wat leidt tot wederzijdse vasthouding en een geheugenlek. Om dit te voorkomen, wordt weak self gebruikt.

Voorbeeld: je hebt een klasse ViewController die een asynchrone operatie start met een closure. Als je in de closure self direct gebruikt, wordt ViewController vastgehouden door de closure en wordt niet vrijgegeven na het sluiten.

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 bijwerken
    }
}

Hier voorkomt weak self een sterke cyclische verwijzing, omdat de closure self zwak vastlegt en het object niet vasthoudt, waardoor het kan worden vrijgegeven.