Junior — Middle
Můžeš uvést příklad, kdy je v uzávěru ve Swift nutné použít weak self, aby se předešlo cyklickým odkazům?
sobes.tech AI
Odpověď od AI
V Swiftu dochází k cyklickému odkazu, když objekt zachytí sám sebe v uzávěru a tento uzávěr je uložen ve stejném objektu, což vede k vzájemnému udržování a úniku paměti. Abychom tomu zabránili, používá se weak self.
Příklad: máte třídu ViewController, která spouští asynchronní operaci s uzávěrem. Pokud v uzávěru přímo použijete self, bude ViewController udržován uzávěrem a nebude uvolněn po jeho uzavření.
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) {
// aktualizace rozhraní
}
}
Zde weak self zabraňuje silnému cyklickému odkazu, protože uzávěr zachytí `self slabě a neudržuje objekt, což mu umožní být uvolněn.