¿Cómo se gestiona la memoria para los tipos de referencia en Swift?
sobes.tech AI
Respuesta de la IA
En Swift, la gestión de memoria para tipos de referencia (clases) se realiza mediante conteo automático de referencias (ARC, Automatic Reference Counting). Cada objeto en el montón mantiene un contador de referencias: la cantidad de referencias activas a ese objeto. Cuando se crea una nueva referencia a un objeto, el contador aumenta, y cuando la referencia deja de usarse, disminuye. Cuando el contador alcanza cero, el objeto se elimina automáticamente de la memoria.
Ejemplo:
class Person {
var name: String
init(name: String) {
self.name = name
}
}
var a: Person? = Person(name: "Alice") // contador = 1
var b = a // contador = 2
b = nil // contador = 1
a = nil // contador = 0, objeto eliminado
Es importante evitar ciclos de referencias (retained cycles), donde dos objetos se refieren mutuamente, lo que impide liberar la memoria. Para ello, se utilizan referencias débiles (weak) y sin propietario (unowned).
Los tipos de valor (estructuras, enumeraciones) se almacenan en la pila y se copian al asignar, por lo que ARC no se aplica a ellos.