Sobes.tech
Junior — Middle

Čo je rozdiel medzi typmi odkazov Strong a Weak v správe pamäte a modeli odkazov?

sobes.tech AI

Odpoveď od AI

Strong-vezba — je običajna snažna veza na objekt, ktorá zvyšuje čítač odkazov (retain count) tohto objektu. Kým existuje aspoň jedna silná veza, objekt nebude odstránený z pamäti.

Weak-vezba — je slabá veza, ktorá nezvyšuje čítač odkazov objektu. Používa sa na prevenciu cyklov držania (retain cycles). Ak je objekt, na ktorý odkazuje weak-vezba, odstránený, weak-vezba sa automaticky nastaví na nil.

Príklad v Swift:

class Person {
    var name: String
    init(name: String) { self.name = name }
    var apartment: Apartment?
}

class Apartment {
    let unit: String
    weak var tenant: Person?  // weak veza na zabránenie cyklu
    init(unit: String) { self.unit = unit }
}

let john = Person(name: "John")
let apt = Apartment(unit: "4A")
john.apartment = apt
apt.tenant = john  // weak-vezba

Tu, weak-vezba tenant ne udržiava objekt Person, čím sa zabraňuje únikom pamäti.