Sobes.tech
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.