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ó.