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.