Sobes.tech
Junior — Middle

Kuo skiriasi Strong ir Weak nuorodų tipai atminties valdyme ir nuorodų modelyje?

sobes.tech AI

Atsakymas iš AI

Strong-ryšys — tai įprastas stiprus ryšys su objektu, kuris padidina šio objekto nuorodų skaitiklį (retain count). Kol egzistuoja bent vienas stiprus ryšys, objektas nėra pašalinamas iš atminties.

Weak-ryšys — tai silpnas ryšys, kuris nepadidina objekto nuorodų skaitiklio. Jis naudojamas siekiant išvengti ciklinių nuorodų (retain cycles). Jei objektas, į kurį nurodo weak-ryšys, yra pašalinamas, weak-ryšys automatiškai tampa nil.

Pavyzdys 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 ryšys, siekiant išvengti ciklų
    init(unit: String) { self.unit = unit }
}

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

Čia, weak-ryšys tenant nelaiko Person objekto, kas leidžia išvengti atminties nutekėjimo.