Sobes.tech
Junior — Middle

Čime se razlikuju tipovi referenci Strong i Weak u upravljanju memorijom i modelu referenci?

sobes.tech АИ

Одговор од АИ

Strong-vezava — to je običajna snažna veza na objekat, koja povećava brojač referenci (retain count) tog objekta. Dok postoji bar jedna snažna veza, objekat neće biti uklonjen iz memorije.

Weak-vezava — to je slaba veza, koja ne povećava brojač referenci objekta. Koristi se za sprečavanje cikličkih referenci (retain cycles). Ako je objekat na koji ukazuje weak-vezava uklonjen, weak-vezava automatski postaje nil.

Primer u Swift:

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

class Apartment {
    let unit: String
    weak var tenant: Person?  // slaba veza za izbegavanje ciklusa
    init(unit: String) { self.unit = unit }
}

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

Ovde, weak-vezava tenant ne drži objekat Person, što omogućava izbegavanje curenja memorije.