Junior — Middle
Kādās situācijās būtu jālieto vāja (weak) atsauce iekšā slēgā (closure)?
sobes.tech AI
Atbilde no AI
Vājās atsauces (weak) iekļautas aizvērumos iOS tiek izmantotas, lai novērstu stipru atsauces ciklus (retain cycles), kas var novest pie atmiņas noplūdēm. Parasti tas ir svarīgi, kad aizvērums iekļauj objektu (piemēram, self) un tiek turēts šī objekta, radot abpusēju stipru atsauci.
Izmantojiet weak, lai atsauktos uz self aizvēruma iekšpusē, ja aizvērums tiek glabāts kā objekta īpašums vai var dzīvot ilgāk nekā funkcijas izsaukums, lai izvairītos no objekta turēšanas atmiņā pēc tā atbrīvošanas.
Swift piemērs:
class ViewController {
var completion: (() -> Void)?
func setup() {
completion = { [weak self] in
guard let self = self else { return }
self.doSomething()
}
}
func doSomething() {
print("Darbība pabeigta")
}
}
Šeit [weak self] novērš stipru ciklu starp ViewController un aizvērumu completion.