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?
}