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.