Junior — Middle
Milyen helyzetekben nem növeli a memória kezelésére szolgáló hivatkozásszámláló az objektum számlálóját?
sobes.tech MI
Válasz az MI-től
A referencia számlálás (reference counting) használata a következő helyzetekben nem növeli a számlálót:
- Gyenge hivatkozások (weak references): nem növelik a számlálót, hogy elkerüljék a ciklikus függőségeket. Például iOS-ben ARC-vel a gyenge hivatkozásokat
weak-ként deklarálják. - Nem tulajdonló hivatkozások (unowned references): hasonlóak a gyenge hivatkozásokhoz, de feltételezik, hogy az objektum mindig létezik, és szintén nem növelik a számlálót.
- A fordító vagy a futásidejű környezet belső optimalizálásai: néha a hivatkozásokat úgy optimalizálják, hogy a számláló ne változzon.
Swift-ben például a gyenge hivatkozás így néz ki:
class Person {
var name: String
weak var apartment: Apartment? // nem növeli a számlálót
init(name: String) {
self.name = name
}
}
class Apartment {
var unit: String
init(unit: String) {
self.unit = unit
}
}
Itt az apartment gyenge hivatkozás, amely nem növeli az Apartment objektum számlálóját.