Junior — Middle
Czym różnią się typy referencji Strong i Weak w zarządzaniu pamięcią i modelu referencyjnym?
sobes.tech AI
Odpowiedź od AI
Strong-odwołanie to zwykłe silne odwołanie do obiektu, które zwiększa licznik odwołań (retain count) tego obiektu. Dopóki istnieje co najmniej jedno silne odwołanie, obiekt nie zostanie usunięty z pamięci.
Weak-odwołanie to słabe odwołanie, które nie zwiększa licznika odwołań obiektu. Służy do zapobiegania cyklom zatrzymania (retain cycles). Jeśli obiekt, na który wskazuje weak-odwołanie, zostanie usunięty, weak-odwołanie automatycznie zostanie ustawione na nil.
Przykład w 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 odwołanie, aby uniknąć cyklu
init(unit: String) { self.unit = unit }
}
let john = Person(name: "John")
let apt = Apartment(unit: "4A")
john.apartment = apt
apt.tenant = john // weak-odwołanie
Tutaj, weak-odwołanie tenant nie utrzymuje obiektu Person, co pozwala uniknąć wycieków pamięci.