Junior — Middle
¿Es posible la existencia de referencias cíclicas que impidan la recolección de basura en un gestor de memoria automático?
sobes.tech AI
Respuesta de la IA
Sí, en iOS, al usar la gestión automática de memoria (ARC), puede ocurrir la creación de ciclos de referencias (retains). Esto sucede cuando dos o más objetos se mantienen mutuamente mediante referencias fuertes, lo que impide que el contador de referencias llegue a cero y, por lo tanto, que los objetos se liberen.
Para evitar estas situaciones, se utilizan referencias débiles (weak) o sin propietario (unowned). Por ejemplo, los delegados generalmente se declaran como weak para prevenir ciclos.
Ejemplo:
class Person {
var apartment: Apartment?
}
class Apartment {
weak var tenant: Person? // referencia débil para prevenir ciclo
}
let john = Person()
let unit4A = Apartment()
john.apartment = unit4A
unit4A.tenant = john
En este ejemplo, tenant es una referencia débil, por lo que no se crea un ciclo, y los objetos serán liberados correctamente por el recolector de basura.