Junior — Middle
Puoi fare un esempio di quando in una closure in Swift è necessario usare weak self per evitare riferimenti ciclici?
sobes.tech AI
Risposta dell'AI
In Swift, un ciclo di riferimento si verifica quando un oggetto cattura se stesso in una closure, e questa closure viene memorizzata nello stesso oggetto, portando a un mantenimento reciproco e a una perdita di memoria. Per evitarlo, si usa weak self.
Esempio: hai una classe ViewController che avvia un'operazione asincrona con una closure. Se nella closure usi self direttamente, allora ViewController sarà trattenuto dalla closure e non verrà liberato dopo la chiusura.
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) {
// aggiornamento dell'interfaccia
}
}
Qui, weak self previene un ciclo forte, poiché la closure cattura self debolmente e non trattiene l'oggetto, permettendo di rilasciarlo.