Sobes.tech
Junior — Middle

Ako sa dajú odstrániť cyklické odkazy v správe pamäte, aby sa predišlo únikom?

sobes.tech AI

Odpoveď od AI

Cyklické odkazy vznikají, když na sebe dva nebo více objektů odkazují, což brání automatickému uvolnění paměti, zejména při použití počítání odkazů.

Na iOS (Objective-C/Swift) se k prevenci úniků paměti způsobených kruhovými odkazy používají:

  • Slabé odkazy (weak) — nezvyšují čítač odkazů, automaticky se nastaví na nil při odstranění objektu.
  • Nepatrné odkazy (unowned) — nezvyšují čítač, ale nenastavují se na nil, používají se, když objekt určitě existuje.

Například ve Swift:

class A {
    var b: B?
}

class B {
    weak var a: A?  // slabý odkaz, aby se předešlo cyklu
}

Použití weak nebo unowned přerušuje cyklus, umožňuje ARC správně uvolnit objekty a vyhýbat se únikům paměti.