Sobes.tech
Junior — Middle

Je možné vznik cyklických odkazů, které brání sběru odpadu v automatickém správci paměti?

sobes.tech AI

Odpověď od AI

Ano, na iOS může při použití automatického řízení paměti (ARC) dojít ke vzniku cyklických odkazů (retain cycles). To se stává, když si dva nebo více objektů navzájem drží silné odkazy, což zabrání tomu, aby čítač odkazů klesl na nulu a objekty byly uvolněny.

Aby se těmto situacím předešlo, používají se slabé (weak) nebo bezvlastnické (unowned) odkazy. Například delegáti jsou obvykle deklarováni jako weak, aby se zabránilo cyklům.

Příklad:

class Person {
    var apartment: Apartment?
}

class Apartment {
    weak var tenant: Person?  // slabý odkaz zabraňuje cyklu
}

let john = Person()
let unit4A = Apartment()
john.apartment = unit4A
unit4A.tenant = john

V tomto příkladu je tenant slabý odkaz, takže cyklus nevznikne a objekty budou správně uvolněny garbage collectorem.