ARC en Swift: cómo funciona la gestión automática de memoria sin GC

Toda variable que apunta a un objeto de clase tiene por defecto una referencia strong, que incrementa el retain count. La instancia se libera cuando el retain count llega a 0:

func crearPersona() {
    let p = Persona(nombre: "Carlos")  // retain count: 1
    print(p.nombre)
}  // fin del scope: retain count 0, deinit

crearPersona()  // Init Carlos ... Deinit Carlos

ARC vs GC

El garbage collector de Java/Go hace paradas del mundo (stop-the-world) para recolectar memoria no referenciada. ARC libera la memoria en el mismo hilo, en el mismo instante en que el retain count llega a 0. Esto hace a Swift predecible en términos de latencia y lo hace apto para sistemas en tiempo real. La contrapartida es que ARC no detecta ciclos de retención por sí solo.

Detectar retain count con Xcode Instruments

Usa la plantilla Leaks de Instruments para detectar objetos que nunca se liberan. La plantilla Allocations muestra el ciclo de vida completo de cada instancia con su retain count a lo largo del tiempo. Ambas son herramientas imprescindibles para diagnosticar problemas de memoria en producción.

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP