Sobes.tech
Junior — Middle

Czy możesz wyjaśnić, jak odbywa się zwalnianie pamięci zajmowanej przez obiekt w systemie?

sobes.tech AI

Odpowiedź od AI

W iOS, zwolnienie pamięci obiektów odbywa się głównie za pomocą mechanizmu ARC (Automatyczne Liczenie Referencji).

Każdy obiekt w pamięci ma licznik referencji – liczbę aktywnych odwołań do niego. Gdy tworzona jest referencja do obiektu, licznik rośnie; gdy referencja jest usuwana, licznik 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: "Alex") // licznik referencji = 1
var person2 = person1 // licznik referencji = 2
person1 = nil // licznik referencji = 1
person2 = nil // licznik referencji = 0, obiekt jest zwalniany

Jeśli istnieją cykliczne odwołania (np. dwa obiekty odwołujące się do siebie nawzajem), ARC nie może automatycznie zwolnić pamięci. Aby temu zapobiec, używa się odwołań słabych (weak) lub nieposiadanych (unowned), które nie zwiększają licznika.