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.