Junior — Middle
Ako a v akých prípadoch sa používajú slabé odkazy vo vnútri uzáverov?
sobes.tech AI
Odpoveď od AI
V iOS pri práci s closures často nastáva problém cyklických odkazov, keď objekt zachytí closure a closure zachytí objekt, čo vedie k únikom pamäte. Aby ste tomu predišli, používajú sa vo vnútri closure slabé odkazy (weak references).
Slabý odkaz nezvyšuje počet odkazov na objekt, takže ak nie sú žiadne silné odkazy, objekt môže byť uvoľnený.
Príklad použitia slabého odkazu vnútri closure:
class ViewController {
var completionHandler: (() -> Void)?
func setup() {
completionHandler = { [weak self] in
guard let self = self else { return }
self.doSomething()
}
}
func doSomething() {
print("Akcia vykonaná")
}
}
Prípadové použitia:
- Keď closure zachytí self alebo iné objekty, aby sa predišlo cyklu udržiavania.
- V asynchrónnych operáciách, kde môže byť objekt zničený pred vykonaním closure.
Použitie slabých odkazov pomáha spravovať pamäť a predchádzať únikom.