Sobes.tech
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.