Sobes.tech
Junior — Middle

Tudsz példát mondani arra, mikor szükséges a weak self használata egy Swift-ben lévő zárójelben, hogy elkerüljük a ciklikus hivatkozásokat?

sobes.tech MI

Válasz az MI-től

Swiftben egy körkörös hivatkozás akkor fordul elő, amikor egy objektum egy zárványban (closure) fogja meg önmagát, és ez a zárvány ugyanabban az objektumban van tárolva, ami kölcsönösen megtartja egymást, és memória szivárgáshoz vezet. Ennek elkerülése érdekében a weak self-t használják.

Példa: van egy ViewController osztályod, amely egy aszinkron műveletet indít egy zárvány segítségével. Ha a zárványban közvetlenül használod a self-t, akkor a ViewController-t a zárvány tartja meg, és nem szabadul fel a bezárás után.

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) {
        // felület frissítése
    }
}

Itt a weak self megakadályozza az erős körkörös hivatkozást, mivel a zárvány gyengén fogja meg a self-t, és nem tartja meg az objektumot, így az felszabadítható.