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 го управлява автоматично.