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.