Junior
Cos'è una perdita di memoria e come si verifica?
sobes.tech AI
Risposta dell'AI
Una fuga di memoria è una situazione in cui un programma assegna memoria per gli oggetti, ma dopo che non sono più necessari, i riferimenti a essi non vengono rimossi e il garbage collector non può liberare questa memoria. Su iOS, dove viene utilizzato ARC (Contatore di Riferimento Automatico), le fughe di memoria si verificano spesso a causa di riferimenti ciclici, ad esempio quando due oggetti si riferiscono reciprocamente tramite riferimenti forti, e nessuno di essi viene liberato.
Esempio di riferimento ciclico in Swift:
class A {
var b: B?
}
class B {
var a: A?
}
let a = A()
let b = B()
a.b = b
b.a = a
// Entrambi gli oggetti si riferiscono reciprocamente, ARC non può liberarli automaticamente
Per evitare fughe, si usano riferimenti deboli (weak) o senza proprietario (unowned), che non aumentano il contatore di riferimenti e consentono di liberare correttamente gli oggetti.