Sobes.tech
Junior — Middle

É possível implementar um mecanismo que rastreie objetos usando referências fracas, sem impedir a sua remoção pelo coletor de lixo?

sobes.tech IA

Resposta da IA

Sim, no iOS (e em Swift) existe um mecanismo de referências fracas (weak references), que permite rastrear objetos sem os manter na memória e evitar a sua eliminação pelo coletor de lixo (ARC).

Uma referência fraca não aumenta o contador de referências do objeto, portanto, quando não restam referências fortes, o objeto é libertado da memória.

Exemplo de uso de uma referência fraca em Swift:

class Person {
    let name: String
    init(name: String) {
        self.name = name
    }
}

class Apartment {
    weak var tenant: Person?  // referência fraca
}

var person: Person? = Person(name: "Ivan")
var apartment: Apartment? = Apartment()
apartment?.tenant = person

person = nil  // o objeto Person será eliminado, pois não há referências fortes

print(apartment?.tenant)  // nil

Assim, as referências fracas permitem rastrear objetos sem impedir a sua eliminação.