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?
}