Sobes.tech
Junior — Middle

Pode uma referência forte numa entidade levar a fugas de memória?

sobes.tech IA

Resposta da IA

Sim, a presença de ligações fortes entre objetos no iOS pode levar a vazamentos de memória, especialmente se ocorrer um ciclo de referência ( ciclo de retenção). Isso acontece quando dois objetos se mantêm mutuamente por ligações fortes, e o sistema ARC não consegue libertá-los, pois o contador de referências de ambos não chega a zero.

Para evitar esses vazamentos, usam-se ligações fracas (weak) ou sem proprietário (unowned), que não aumentam o contador de referências e permitem quebrar o ciclo.

Exemplo de ciclo de referência:

class Person {
    var apartment: Apartment?
}

class Apartment {
    var tenant: Person?
}

let person = Person()
let apartment = Apartment()
person.apartment = apartment
apartment.tenant = person // aqui ocorre um ciclo de retenção

Para evitar o vazamento, pode-se tornar uma das ligações fraca:

class Apartment {
    weak var tenant: Person?
}