Sobes.tech
Junior — Middle

V ktorých situáciách použitie počítadla odkazov na správu pamäte nemusí zvýšiť čítač pre objekt?

sobes.tech AI

Odpoveď od AI

Použitie počítadla odkazov (reference counting) nezvyšuje počítadlo v nasledujúcich situáciách:

  • Slabé odkazy (weak references): nezvyšujú počítadlo, aby sa predišlo cyklickým závislostiam. Napríklad v iOS s ARC sú slabé odkazy deklarované pomocou weak.
  • Nepatrné odkazy (unowned references): podobné slabým, ale predpokladajú, že objekt vždy existuje, a tiež nezvyšujú počítadlo.
  • Vnútorné optimalizácie kompilátora alebo runtime: niekedy môžu byť odkazy optimalizované tak, že sa počítadlo nemení.

Príklad slabého odkazu v Swift:

class Person {
    var name: String
    weak var apartment: Apartment? // nezvyšuje počítadlo
    init(name: String) {
        self.name = name
    }
}

class Apartment {
    var unit: String
    init(unit: String) {
        self.unit = unit
    }
}

Tu je apartment slabý odkaz, ktorý nezvyšuje počítadlo objektu Apartment.