Junior — Middle
É possível a ocorrência de referências circulares que impedem a recolha de lixo no gestor de memória automático?
sobes.tech IA
Resposta da IA
Sim, no iOS, ao usar a gestão automática de memória (ARC), pode ocorrer a formação de ciclos de referências (retain cycles). Isto acontece quando dois ou mais objetos mantêm referências fortes entre si, impedindo que o contador de referências chegue a zero, e assim, os objetos não são libertados.
Para evitar estas situações, usam-se referências fracas (weak) ou sem proprietário (unowned). Por exemplo, os delegados geralmente são declarados como weak para prevenir ciclos.
Exemplo:
class Person {
var apartment: Apartment?
}
class Apartment {
weak var tenant: Person? // referência fraca para evitar ciclo
}
let john = Person()
let unit4A = Apartment()
john.apartment = unit4A
unit4A.tenant = john
Neste exemplo, tenant é uma referência fraca, portanto, não ocorre ciclo, e os objetos serão libertados corretamente pelo coletor de lixo.