Junior — Middle
Vai vari sniegt piemēru, kad Swift aizvēruma (closure) gadījumā ir nepieciešams izmantot weak self, lai novērstu cikliskas atsauces?
sobes.tech AI
Atbilde no AI
Swiftā cikliska atsauce rodas, kad objekts aizķeras pie sevis slēdzienā, un šis slēdzis tiek saglabāts tajā pašā objektā, kas noved pie savstarpējas noturēšanas un atmiņas noplūdes. Lai to novērstu, izmanto weak self.
Piemērs: jums ir klase ViewController, kas sāk asinhronu operāciju ar slēdzi. Ja slēdzienā tieši izmanto self, tad ViewController tiks noturēts ar slēdzi un netiks atbrīvots pēc aizvēršanas.
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) {
// interfeisa atjaunināšana
}
}
Šeit weak self novērš stipru ciklisku atsauci, jo slēdzis vājināti aizķer self un neuztur objektu, ļaujot tam tikt atbrīvotam.