Sobes.tech
Junior — Middle

Ako sa uvoľňuje pamäť pre objekty s cyklickými odkazmi v riadených prostrediach?

sobes.tech AI

Odpoveď od AI

V riadených prostrediach, ako je iOS s ARC (Automatické počítanie referencií), nedochádza k automatickému uvoľneniu pamäte pre objekty s cyklickými odkazmi, pretože ARC nedokáže prerušovať cykly odkazov.

Na vyriešenie tohto problému sa používajú slabé (weak) a bezvlastnícke (unowned) odkazy, ktoré nezvyšujú čítač odkazov objektu. To umožňuje prerušovať cykly a správne uvoľniť pamäť.

Príklad:

class Person {
    var name: String
    weak var apartment: Apartment? // slabý odkaz

    init(name: String) {
        self.name = name
    }
}

class Apartment {
    let unit: String
    unowned let tenant: Person // bezvlastnícky odkaz

    init(unit: String, tenant: Person) {
        self.unit = unit
        self.tenant = tenant
    }
}

Tu sa Person a Apartment odkazujú navzájom, ale jeden z odkazov je slabý, čo zabraňuje únikom pamäti.

Ak cykly odkazov nebudú prerušované, objekty zostanú v pamäti aj bez externých odkazov, čo povedie k únikom pamäti.