Sobes.tech
Junior — Middle

Kā notiek atmiņas atbrīvošana, izmantojot atsauces tipu izveidotiem objektiem?

sobes.tech AI

Atbilde no AI

iOS sistēmā objekti, kas izveidoti, izmantojot atsauces tipus (piemēram, Swift vai Objective-C klases), tiek pārvaldīti ar automātiskās atsauces skaitīšanas (ARC — Automatic Reference Counting) sistēmu. Katrs objekts saglabā atsauces skaitītāju — aktīvo atsauču skaitu uz to. Kad tiek izveidota jauna atsauce uz objektu, skaitītājs palielinās, un kad atsauce vairs netiek izmantota (piemēram, mainīgais iziet no darbības apgabala vai tiek piešķirts nil), skaitītājs samazinās.

Kad objekta atsauces skaitītājs sasniedz nulli, tas nozīmē, ka uz to vairs neatsaucas neviens, un atmiņa, ko aizņēma objekts, automātiski tiek atbrīvota. Tas palīdz novērst atmiņas noplūdes bez manuālas pārvaldības.

Swift piemērs:

class Person {
    var name: String
    init(name: String) {
        self.name = name
    }
    deinit {
        print("Persona \(name) ir atbrīvota")
    }
}

var p1: Person? = Person(name: "Ivan")
var p2 = p1 // atsauces skaitītājs palielinājās
p1 = nil // skaitītājs samazinājās, bet objekts joprojām pastāv
p2 = nil // skaitītājs ir 0, objekts ir atbrīvots

Ir svarīgi izvairīties no cikliskām atsaucēm (retain cycles), kad divi objekti viens otru norāda, kas traucē atbrīvot atmiņu. Tam izmanto weak vai unowned atsauces.