Sobes.tech
Junior — Middle

¿Puede la presencia de una referencia fuerte en una entidad conducir a fugas de memoria?

sobes.tech AI

Respuesta de la IA

Sí, la presencia de enlaces fuertes entre objetos en iOS puede conducir a fugas de memoria, especialmente si se produce un ciclo de referencia (retener ciclo). Esto sucede cuando dos objetos se mantienen mutuamente mediante enlaces fuertes, y el sistema ARC no puede liberarlos, ya que el contador de referencias de ambos no llega a cero.

Para prevenir estas fugas, se utilizan enlaces débiles (weak) o sin dueño (unowned), que no aumentan el contador de referencias y permiten romper el ciclo.

Ejemplo de ciclo de referencia:

class Person {
    var apartment: Apartment?
}

class Apartment {
    var tenant: Person?
}

let person = Person()
let apartment = Apartment()
person.apartment = apartment
apartment.tenant = person // aquí se produce un ciclo de retención

Para evitar la fuga, se puede hacer que uno de los enlaces sea débil:

class Apartment {
    weak var tenant: Person?
}