Sobes.tech
Back to questions
Junior — Middle
67

Каким образом происходит освобождение памяти у объектов, созданных с использованием ссылочного типа?

Answer from AI

sobes.tech AI

В iOS объекты, созданные с использованием ссылочных типов (например, классы в Swift или Objective-C), управляются системой подсчёта ссылок (ARC — Automatic Reference Counting). Каждый объект хранит счётчик ссылок — количество активных ссылок на него. Когда создаётся новая ссылка на объект, счётчик увеличивается, а когда ссылка перестаёт использоваться (например, переменная выходит из области видимости или присваивается nil), счётчик уменьшается.

Когда счётчик ссылок объекта достигает нуля, значит на него больше никто не ссылается, и память, занимаемая объектом, автоматически освобождается. Это позволяет избежать утечек памяти без необходимости ручного управления.

Пример на Swift:

class Person {
    var name: String
    init(name: String) {
        self.name = name
    }
    deinit {
        print("Person \(name) освобождён")
    }
}

var p1: Person? = Person(name: "Иван")
var p2 = p1 // счётчик ссылок увеличился
p1 = nil // счётчик уменьшился, но объект ещё жив
p2 = nil // счётчик стал 0, объект освобождён

Важно избегать циклических ссылок (retain cycles), когда два объекта ссылаются друг на друга, что мешает освобождению памяти. Для этого используют слабые (weak) или безвладельческие (unowned) ссылки.