Sobes.tech
Middle

Как се управлява паметта за референтните типове в 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 не се прилага към тях.