Sobes.tech
Junior — Middle

Ako sa uvoľňuje pamäť, ktorá je obsadená objektom v programe?

sobes.tech AI

Odpoveď od AI

V iOS-och je uvoľňovanie pamäte hlavne automatické vďaka systému ARC (Automatic Reference Counting). Každý objekt má čítač odkazov, ktorý sa zvyšuje pri vytváraní novej silnej referencie a znižuje pri jej odstránení. Keď čítač dosiahne nulu, objekt sa automaticky zničí a pamäť je uvoľnená.

Ak v kóde vzniknú cyklické odkazy (napríklad dva objekty so silnými odkazmi na seba navzájom), pamäť sa neuvoľní. Tento problém riešime pomocou slabých (weak) alebo bezvlastníckych (unowned) odkazov.

Príklad:

class Person {
    var meno: String
    weak var apartment: Apartment? // slabý odkaz, aby sa predišlo cyklu
    init(meno: String) {
        self.meno = meno
    }
}

class Apartment {
    let jednotka: String
    unowned let tenant: Person // bezvlastnícky odkaz
    init(jednotka: String, tenant: Person) {
        self.jednotka = jednotka
        self.tenant = tenant
    }
}

Týmto spôsobom dochádza k automatickému uvoľneniu pamäti, ak sú odkazy správne spravované.