¿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).