Junior — Middle
Quali passaggi devono essere seguiti affinché si verifichi un ciclo di ritenzione (Retain Cycle) in memoria?
sobes.tech AI
Risposta dell'AI
Il ciclo di ritenzione (Retain Cycle) in iOS si verifica quando due o più oggetti si tengono reciprocamente tramite riferimenti forti, impedendo che vengano liberati dalla memoria, causando una perdita.
Perché si verifichi un ciclo di ritenzione, sono necessari i seguenti passaggi:
- L'oggetto A contiene un riferimento forte all'oggetto B.
- L'oggetto B contiene un riferimento forte all'oggetto A.
- Nessuno dei due oggetti viene rilasciato, poiché il contatore di riferimenti non raggiunge zero.
Esempio:
class A {
var b: B?
}
class B {
var a: A?
}
let a = A()
let b = B()
a.b = b
b.a = a // Ciclo di ritenzione
Per evitare il ciclo, uno dei riferimenti viene reso debole (weak) o senza proprietario (unowned). Ad esempio:
class B {
weak var a: A?
}
In questo modo, il ciclo di ritenzione si verifica quando ci sono riferimenti forti reciproci senza interruzione, bloccando la liberazione degli oggetti.