Sobes.tech
Junior — Middle

¿Puedes dar un ejemplo de cuándo en un cierre en Swift es necesario usar weak self para evitar referencias cíclicas?

sobes.tech AI

Respuesta de la IA

En Swift, un ciclo de referencia ocurre cuando un objeto captura una referencia a sí mismo en un cierre, y ese cierre se almacena en el mismo objeto, lo que lleva a que ambos se retengan mutuamente y cause una fuga de memoria. Para evitar esto, se usa weak self.

Ejemplo: tienes una clase ViewController que inicia una operación asíncrona con un cierre. Si en el cierre usas self directamente, entonces ViewController será retenido por el cierre y no se liberará después de cerrarse.

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) {
        // actualización de la interfaz
    }
}

Aquí, weak self previene un ciclo fuerte, ya que el cierre captura self débilmente y no retiene el objeto, permitiendo que se libere.