Sobes.tech
Junior — Middle

Ar galite paaiškinti Swift kalbos šiukšlių surinkėjo veikimo mechanizmą ir kaip jis valdo atmintį?

sobes.tech AI

Atsakymas iš AI

Swift'e nėra klasikinio šiukšlių surinkėjo (Garbage Collector), kaip kai kuriose kitose kalbose. Vietoje to naudojamas automatinio nuorodų skaičiavimo (ARC - Automatic Reference Counting) mechanizmas.

ARC veikia taip: kiekvienas objektas atmintyje turi nuorodų skaitiklį, kuris didėja, kai sukuriama nauja nuoroda į objektą, ir mažėja, kai nuoroda pašalinama arba tampa nil. Kai objekto nuorodų skaitiklis pasiekia nulį, objektas automatiškai pašalinamas iš atminties.

Pavyzdys:

class Person {
    var name: String
    init(name: String) {
        self.name = name
    }
}

var person1: Person? = Person(name: "Иван")
var person2 = person1 // nuorodų skaitiklis didėja
person1 = nil // skaitiklis mažėja, bet objektas vis dar gyvas, nes person2 nurodo į jį
person2 = nil // skaitiklis tampa 0, ir objektas pašalinamas

Taip, atminties valdymas Swift'e vyksta automatiškai, nereikia rankiniu būdu kviesti šiukšlių surinkėją, tai pagerina našumą ir sumažina atminties nutekėjimo tikimybę, jei naudojama teisingai.