Sobes.tech
Junior — Middle

Czy silne odniesienie w jednostce może prowadzić do wycieków pamięci?

sobes.tech AI

Odpowiedź od AI

Tak, obecność silnych odniesień między obiektami w iOS może prowadzić do wycieków pamięci, szczególnie jeśli występuje cykliczne odniesienie (cykl zatrzymania). Dzieje się tak, gdy dwa obiekty utrzymują się nawzajem za pomocą silnych odniesień, a system ARC nie może ich zwolnić, ponieważ licznik odniesień obu nie osiąga zera.

Aby zapobiec takim wyciekom, używa się słabych (weak) lub bezwładnych (unowned) odniesień, które nie zwiększają licznika odniesień i pozwalają przerwać cykl.

Przykład cyklu odniesień:

class Person {
    var apartment: Apartment?
}

class Apartment {
    var tenant: Person?
}

let person = Person()
let apartment = Apartment()
person.apartment = apartment
apartment.tenant = person // tutaj powstaje cykl zatrzymania

Aby uniknąć wycieku, można uczynić jedno z odniesień słabym:

class Apartment {
    weak var tenant: Person?
}