Sobes.tech
Junior — Middle

Как се освобождава паметта, заета от обект в програма?

sobes.tech AI

Отговор от AI

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

Ако в кода възникнат циклични референции (например, два обекта с силни референции един към друг), паметта не се освобождава. За решаване на този проблем се използват слаби (weak) или безвладетелски (unowned) референции.

Пример:

class Person {
    var name: String
    weak var apartment: Apartment? // слаба референция, за да се избегне цикъл
    init(name: String) {
        self.name = name
    }
}

class Apartment {
    let unit: String
    unowned let tenant: Person // безвладетелска референция
    init(unit: String, tenant: Person) {
        self.unit = unit
        self.tenant = tenant
    }
}

По този начин, освобождаването на паметта става автоматично, ако референциите се управляват правилно.