Sobes.tech
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.