Sobes.tech
Junior — Middle

¿Puedes enumerar los principales tipos de fugas de memoria que pueden ocurrir al programar en Swift?

sobes.tech AI

Respuesta de la IA

En Swift, los principales tipos de fugas de memoria están relacionados con ciclos de referencias (retains cycles), que ocurren cuando los objetos se mantienen mutuamente, y ARC (Contador de Referencias Automático) no puede liberar la memoria. Los casos principales:

  • Ciclos de referencias entre clases: dos objetos de clase con referencias fuertes entre sí.
  • Closures que capturan self: si un closure captura self sin usar [weak self] o [unowned self], esto conduce a un ciclo.
  • Referencias fuertes en delegados: si el delegado se declara como una referencia fuerte, y el objeto delegado se refiere de vuelta.

Ejemplo de fuga con un closure:

class ViewController {
    var closure: (() -> Void)?

    func setup() {
        closure = {
            print(self) // captura self con referencia fuerte
        }
    }
}

Para evitarlo, se usan referencias débiles:

closure = { [weak self] in
    guard let self = self else { return }
    print(self)
}

De esta manera, lo principal es controlar las referencias fuertes y usar referencias débiles o sin propietario donde sea necesario.