Sobes.tech
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.