Sobes.tech
Junior — Middle

Jak odbywa się przydział i zwalnianie pamięci dla typów danych referencyjnych?

sobes.tech AI

Odpowiedź od AI

W iOS, dla typów referencyjnych (np. klas) pamięć jest przydzielana dynamicznie na stercie (heap). Gdy tworzony jest obiekt klasy, system przydziela mu pamięć na stercie i zwraca odwołanie do tego obiektu.

Zwalnianie pamięci odbywa się za pomocą automatycznego zliczania odwołań (ARC — Automatic Reference Counting). Każdy obiekt przechowuje licznik odwołań — liczbę aktywnych odwołań do niego. Gdy tworzone jest nowe odwołanie, licznik rośnie, a gdy odwołanie jest usuwane lub ustawione na nil, maleje. Gdy licznik osiąga zero, obiekt jest automatycznie usuwany z pamięci.

Przykład:

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

var person1: Person? = Person(name: "Иван") // licznik odwołań = 1
var person2 = person1 // licznik odwołań = 2
person1 = nil // licznik odwołań = 1
person2 = nil // licznik odwołań = 0, obiekt Person jest usuwany z pamięci

W ten sposób, programista nie musi ręcznie zwalniać pamięci — ARC zarządza tym automatycznie.