Sobes.tech
Junior — Middle

Qual é a diferença entre os tipos de referências Strong e Weak na gestão de memória e no modelo de referência?

sobes.tech IA

Resposta da IA

Uma referência forte é uma referência normal forte a um objeto, que aumenta o contador de referências (contagem de retenção) desse objeto. Enquanto existir pelo menos uma referência forte, o objeto não será removido da memória.

Uma referência fraca é uma referência fraca, que não aumenta o contador de referências do objeto. Ela é usada para evitar ciclos de retenção. Se o objeto ao qual a referência fraca aponta for removido, a referência fraca é automaticamente definida como nil.

Exemplo em Swift:

class Person {
    var name: String
    init(name: String) { self.name = name }
    var apartment: Apartment?
}

class Apartment {
    let unit: String
    weak var tenant: Person?  // referência fraca para evitar ciclo
    init(unit: String) { self.unit = unit }
}

let john = Person(name: "John")
let apt = Apartment(unit: "4A")
john.apartment = apt
apt.tenant = john  // referência fraca

Aqui, a referência fraca tenant não mantém o objeto Person, o que permite evitar vazamentos de memória.