Sobes.tech
Junior — Middle

¿Cómo se libera la memoria de los objetos creados usando tipos de referencia?

sobes.tech AI

Respuesta de la IA

En iOS, los objetos creados con tipos de referencia (por ejemplo, clases en Swift o Objective-C) son gestionados por el sistema de conteo de referencias (ARC — Automatic Reference Counting). Cada objeto mantiene un contador de referencias — la cantidad de referencias activas a él. Cuando se crea una nueva referencia al objeto, el contador aumenta, y cuando la referencia deja de usarse (por ejemplo, una variable sale del ámbito o se asigna a nil), el contador disminuye.

Cuando el contador de referencias de un objeto alcanza cero, significa que nadie más hace referencia a él, y la memoria ocupada por el objeto se libera automáticamente. Esto ayuda a evitar fugas de memoria sin necesidad de gestión manual.

Ejemplo en Swift:

class Person {
    var name: String
    init(name: String) {
        self.name = name
    }
    deinit {
        print("Persona \(name) liberada")
    }
}

var p1: Person? = Person(name: "Ivan")
var p2 = p1 // el contador de referencias aumentó
p1 = nil // el contador disminuyó, pero el objeto aún vive
p2 = nil // el contador llegó a 0, el objeto fue liberado

Es importante evitar referencias cíclicas (retained cycles), cuando dos objetos se refieren mutuamente, lo que impide la liberación de memoria. Para ello, se utilizan referencias débiles (weak) o sin propietario (unowned).