Sobes.tech
Junior — Middle

Puoi elencare i principali tipi di perdite di memoria che possono verificarsi durante la programmazione in Swift?

sobes.tech AI

Risposta dell'AI

In Swift, i principali tipi di perdite di memoria sono legati ai cicli di riferimenti (retains cycles), che si verificano quando gli oggetti si tengono reciprocamente, e ARC (Automatic Reference Counting) non può liberare la memoria. I casi principali:

  • Cicli di riferimenti tra classi: due oggetti di classe con riferimenti forti tra loro.
  • Chiusure che catturano self: se una chiusura cattura self senza usare [weak self] o [unowned self], ciò porta a un ciclo.
  • Riferimenti forti nei delegati: se il delegato è dichiarato come riferimento forte, e l'oggetto delegato si riferisce indietro.

Esempio di fuga con una chiusura:

class ViewController {
    var closure: (() -> Void)?

    func setup() {
        closure = {
            print(self) // cattura self con riferimento forte
        }
    }
}

Per evitarlo, si usano riferimenti deboli:

closure = { [weak self] in
    guard let self = self else { return }
    print(self)
}

In questo modo, l'aspetto principale è controllare i riferimenti forti e usare riferimenti deboli o senza proprietario dove necessario.