Sobes.tech
Junior — Middle

Por que se usam referências fracas e fortes na programação, e em que elas diferem?

sobes.tech IA

Resposta da IA

Na programação, especialmente na gestão de memória, são utilizadas referências fortes (strong) e fracas (weak) para controlar o ciclo de vida dos objetos e prevenir fugas de memória.

  • Referência forte mantém o objeto na memória enquanto existir pelo menos uma referência forte. O coletor de lixo não irá removê-lo.
  • Referência fraca não impede a remoção do objeto. Se apenas referências fracas permanecerem, ele pode ser liberado da memória.

Isto é importante para evitar referências cíclicas, quando dois objetos referenciam-se mutuamente por referências fortes, e o coletor de lixo não consegue removê-los. Nesses casos, uma das referências é tornada fraca.

Exemplo em Swift:

class Person {
    var name: String
    weak var apartment: Apartment? // referência fraca
    init(name: String) {
        self.name = name
    }
}

class Apartment {
    var unit: String
    var tenant: Person? // referência forte
    init(unit: String) {
        self.unit = unit
    }
}

let john = Person(name: "John")
let apt = Apartment(unit: "4A")
john.apartment = apt
apt.tenant = john

Aqui, apartment é uma referência fraca para evitar um ciclo de retenção entre Person e Apartment.