Junior — Middle
Kā un kādos gadījumos izmanto vājas atsauces slēdzenēs?
sobes.tech AI
Atbilde no AI
iOS, strādājot ar aizvērumiem (closures), bieži rodas ciklisko atsauču problēma, kad objekts iekļauj aizvērumu, un aizvērums iekļauj objektu, kas noved pie atmiņas noplūdēm. Lai to novērstu, aizvērumu iekšienē tiek izmantotas vājas atsauces (weak references).
Vāja atsauce nepalielina objekta atsauču skaitu, tāpēc, ja nav stipru atsauču, objekts var tikt brīvi atbrīvots.
Piemērs, kā izmantot vāju atsauci aizvērumā:
class ViewController {
var completionHandler: (() -> Void)?
func setup() {
completionHandler = { [weak self] in
guard let self = self else { return }
self.doSomething()
}
}
func doSomething() {
print("Darbība pabeigta")
}
}
Lietošanas gadījumi:
- Kad aizvērumā tiek iekļauts self vai citi objekti, lai izvairītos no noturēšanas cikla.
- Asinhronās operācijās, kurās objekts var tikt iznīcināts pirms aizvērumu izpildes.
Vāju atsauču izmantošana palīdz pārvaldīt atmiņu un novērst noplūdes.