Sobes.tech
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.