Jak zarządzana jest pamięć dla typów referencyjnych w Swift?
sobes.tech AI
Odpowiedź od AI
W Swift zarządzanie pamięcią dla typów referencyjnych (klas) odbywa się za pomocą automatycznego zliczania odwołań (ARC, Automatic Reference Counting). Każdy obiekt na stercie przechowuje licznik odwołań: liczbę aktywnych odwołań do tego obiektu. Gdy tworzona jest nowa referencja do obiektu, licznik rośnie, a gdy referencja przestaje być używana, 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 a: Person? = Person(name: "Alice") // licznik = 1
var b = a // licznik = 2
b = nil // licznik = 1
a = nil // licznik = 0, obiekt jest usuwany
Ważne jest unikanie cykli referencyjnych (retain cycles), gdy dwa obiekty odwołują się do siebie nawzajem, co uniemożliwia zwolnienie pamięci. W tym celu używa się słabych (weak) i bezwładnych (unowned) odwołań.
Typy wartości (struktury, wyliczenia) są przechowywane na stosie i kopiowane podczas przypisania, dlatego ARC nie dotyczy ich.