Как се управлява паметта за референтните типове в Swift?
sobes.tech AI
Отговор от AI
В Swift управлението на паметта за референтните типове (класове) се извършва чрез автоматично преброяване на референциите (ARC, Automatic Reference Counting). Всеки обект в купчината поддържа брояч на референциите: броя на активните референции към този обект. Когато се създаде нова референция към обект, броячът се увеличава, а когато референцията престане да се използва, намалява. Когато броячът достигне нула, обектът автоматично се изтрива от паметта.
Пример:
class Person {
var name: String
init(name: String) {
self.name = name
}
}
var a: Person? = Person(name: "Alice") // брояч = 1
var b = a // брояч = 2
b = nil // брояч = 1
a = nil // брояч = 0, обектът се изтрива
Важно е да се избягват циклични референции (retain cycles), когато два обекта се позовават взаимно, което пречи на освобождаването на паметта. За това се използват слаби (weak) и безвладетелски (unowned) референции.
Типовете стойности (структури, изброявания) се съхраняват в стека и се копират при присвояване, затова ARC не се прилага към тях.