Sobes.tech
Junior — Middle

Quais passos devem ser tomados para que ocorra um ciclo de retenção (Retain Cycle) na memória?

sobes.tech IA

Resposta da IA

O ciclo de retenção (Retain Cycle) no iOS ocorre quando dois ou mais objetos mantêm-se mutuamente através de referências fortes, impedindo que sejam libertados da memória, causando uma fuga.

Para que um ciclo de retenção aconteça, são necessários os seguintes passos:

  1. O objeto A contém uma referência forte ao objeto B.
  2. O objeto B contém uma referência forte ao objeto A.
  3. Nenhum dos objetos é libertado, pois o contador de referências não atinge zero.

Exemplo:

class A {
    var b: B?
}

class B {
    var a: A?
}

let a = A()
let b = B()
a.b = b
b.a = a // Ciclo de retenção

Para evitar o ciclo, uma das referências é tornada fraca (weak) ou sem proprietário (unowned). Por exemplo:

class B {
    weak var a: A?
}

Assim, o ciclo de retenção ocorre quando há referências fortes mútuas sem ruptura, o que bloqueia a libertação dos objetos.