Junior — Middle
Jakie kroki należy podjąć, aby w pamięci powstała pętla zatrzymania (Retain Cycle)?
sobes.tech AI
Odpowiedź od AI
Cykl zatrzymania (Retain Cycle) w iOS występuje, gdy dwa lub więcej obiektów utrzymuje się nawzajem za pomocą silnych referencji, co uniemożliwia ich zwolnienie z pamięci, powodując wyciek.
Aby wystąpił cykl zatrzymania, potrzebne są następujące kroki:
- Obiekt A zawiera silną referencję do obiektu B.
- Obiekt B zawiera silną referencję do obiektu A.
- Żaden z obiektów nie jest zwalniany, ponieważ licznik referencji nie osiąga zera.
Przykład:
class A {
var b: B?
}
class B {
var a: A?
}
let a = A()
let b = B()
a.b = b
b.a = a // Cykl zatrzymania
Aby uniknąć cyklu, jedną z referencji ustawia się jako słabą (weak) lub bez właściciela (unowned). Na przykład:
class B {
weak var a: A?
}
W ten sposób cykl zatrzymania powstaje, gdy występują wzajemne silne referencje bez przerwania, co blokuje zwolnienie obiektów.