Sobes.tech
Junior — Middle

Kādās situācijās atsauču skaitītāja izmantošana atmiņas pārvaldībai var nesagādāt objekta skaitītāja palielināšanos?

sobes.tech AI

Atbilde no AI

Resursu skaitīšanas (reference counting) izmantošana šādās situācijās nesamazina skaitītāju:

  • Vāji norādījumi (weak references): tie nesamazina skaitītāju, lai izvairītos no cikliskām atkarībām. Piemēram, iOS ar ARC, vāji norādījumi tiek deklarēti ar weak.
  • Nepiederīgas norādes (unowned references): līdzīgas vājiem, bet pieņem, ka objekts vienmēr pastāv, un arī nesamazina skaitītāju.
  • Kompilatora vai runtime iekšējās optimizācijas: dažreiz norādes var tikt optimizētas tā, ka skaitītājs nemainās.

Swift piemērs ar vāju norādi:

class Person {
    var name: String
    weak var apartment: Apartment? // nesamazina skaitītāju
    init(name: String) {
        self.name = name
    }
}

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

Šeit apartment ir vāja norāde, kas nesamazina Apartment objekta skaitītāju.