Sobes.tech
Junior — Middle

Kako se oslobađa memorija za objekte sa cikličnim referencama u upravljanim okruženjima?

sobes.tech АИ

Одговор од АИ

У управљаним окружењима, као што је iOS са ARC (Аутоматско бројање референци), ослобађање меморије за објекте са циклуским референцама не дешава аутоматски, јер ARC не може прекинути циклусе референци.

Решење овог проблема су слабе (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
    }
}

Овде, Person и Apartment се позивају међусобно, али једна од референци је слаба, што спречава цурење меморије.

Ако се циклуси референци не прекину, објекти ће остати у меморији и без спољашњих референци, што ће довести до цурења меморије.