Sobes.tech
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.