Jak odbywa się zwalnianie pamięci obiektów tworzonych z użyciem typu referencyjnego?
sobes.tech AI
Odpowiedź od AI
W iOS obiekty tworzone przy użyciu typów referencyjnych (np. klasy w Swift lub Objective-C) są zarządzane przez system zliczania referencji (ARC — Automatic Reference Counting). Każdy obiekt przechowuje licznik referencji — liczbę aktywnych odwołań do niego. Gdy tworzona jest nowa referencja do obiektu, licznik rośnie, a gdy referencja przestaje być używana (np. zmienna wychodzi z zakresu lub jest przypisana do nil), licznik maleje.
Gdy licznik referencji obiektu osiąga zero, oznacza to, że nikt więcej na niego nie wskazuje, i pamięć zajmowana przez obiekt jest automatycznie zwalniana. Pomaga to unikać wycieków pamięci bez konieczności ręcznego zarządzania.
Przykład w Swift:
class Person {
var name: String
init(name: String) {
self.name = name
}
deinit {
print("Osoba \(name) zwolniona")
}
}
var p1: Person? = Person(name: "Ivan")
var p2 = p1 // licznik referencji wzrósł
p1 = nil // licznik zmalał, ale obiekt nadal żyje
p2 = nil // licznik osiągnął 0, obiekt został zwolniony
Ważne jest unikanie cyklicznych referencji (retain cycles), gdy dwa obiekty odwołują się do siebie nawzajem, co uniemożliwia zwolnienie pamięci. W tym celu używa się referencji słabych (weak) lub bezwłaściwych (unowned).