Sobes.tech
Junior — Middle

Как се извършва разпределянето и освобождаването на памет за референтните типове данни?

sobes.tech AI

Отговор от AI

В iOS за типовете с референция (например, класове) паметта се разпределя динамично в купчината (heap). Когато се създаде обект от клас, системата му заделя памет в купчината и връща препратка към този обект.

Освобождаването на паметта става чрез автоматично броене на препратки (ARC — Automatic Reference Counting). Всеки обект поддържа брояч на препратки — броя на активните препратки към него. Когато се създаде нова препратка, броячът се увеличава, а когато препратката бъде изтрита или стане nil, се намалява. Когато броячът достигне нула, обектът автоматично се премахва от паметта.

Пример:

class Person {
    var name: String
    init(name: String) {
        self.name = name
    }
}

var person1: Person? = Person(name: "Иван") // брояч на препратки = 1
var person2 = person1 // брояч на препратки = 2
person1 = nil // брояч на препратки = 1
person2 = nil // брояч на препратки = 0, обектът Person се премахва от паметта

По този начин, разработчикът не трябва ръчно да освобождава паметта — ARC го управлява автоматично.