Disk Cache: cos’è, cache su disco iOS e principi di funzionamento

Autore: IT Sectr Pubblicato: 2026-07-11 Tempo di lettura: 7 min

Disk Cache è un meccanismo di archiviazione temporanea dei dati sul disco del dispositivo, che consente alle applicazioni iOS di accelerare l’accesso ripetuto alle risorse già caricate. Secondo Apple Developer Documentation, 2024, Disk Cache riduce l’utilizzo della rete, diminuisce il carico della batteria e consente il funzionamento dell’app in modalità offline. iOS fornisce diversi meccanismi di caching integrati: URLCache per le richieste di rete, NSCache per la RAM e implementazioni personalizzate attraverso la directory Caches.

Punti chiave

  • Disk Cache — archiviazione dei dati su disco per accelerare l’accesso ripetuto e ridurre il traffico
  • URLCache — meccanismo integrato di caching delle richieste HTTP in iOS
  • Directory Caches — una directory Sandbox dedicata per i dati temporanei dell’app
  • Invalidazione della cache è fondamentale per l’attualità dei dati — strategie basate su tempo, evento e versione
  • Il sistema può cancellare la cache quando lo spazio su disco è insufficiente — la cache non deve contenere dati insostituibili

Cos’è Disk Cache in iOS?

Disk Cache è una tecnologia per archiviare temporaneamente dati sull’archiviazione permanente del dispositivo (memoria flash) per accelerare le richieste successive agli stessi dati. A differenza della cache RAM, Disk Cache conserva i dati dopo il riavvio dell’app e persino del dispositivo.

iOS fornisce due livelli principali di caching: volatile (NSCache, memoria) e su disco (URLCache, file system). La cache su disco è da 10 a 100 volte più lenta della cache volatile, ma significativamente più veloce di una richiesta di rete — la differenza può essere di 2 o 3 ordini di grandezza. La strategia ottimale utilizza una cache a due livelli: memoria per i dati caldi e disco per i dati freddi.

Secondo Apple Performance Optimization Guide, 2023, un Disk Cache correttamente configurato riduce il tempo di caricamento dei contenuti del 60–80% per le visualizzazioni ripetute e diminuisce il consumo di traffico del 40–70%. Per le applicazioni ricche di contenuti multimediali (immagini, video, audio), il caching è un fattore UX critico.

URLCache: meccanismo di caching integrato

URLCache è una classe Foundation integrata che implementa una cache combinata per le richieste URLSession. Salva automaticamente le risposte del server su disco e in memoria, gestendo le dimensioni della cache e le politiche di invalidazione basate su intestazioni HTTP come Cache-Control, Expires e ETag.

swift
import Foundation

let cache = URLCache(
    memoryCapacity: 50 * 1024 * 1024,
    diskCapacity: 200 * 1024 * 1024,
    diskPath: "network-cache"
)

URLCache.shared = cache

let config = URLSessionConfiguration.default
config.urlCache = cache
config.requestCachePolicy = .returnCacheDataElseLoad

let session = URLSession(configuration: config)

Politiche di caching URLCache determinano quando utilizzare i dati memorizzati nella cache e quando eseguire una nuova richiesta. Le principali politiche includono: useProtocolCachePolicy (basata sulle intestazioni del server), reloadIgnoringLocalCacheData (sempre dal server), returnCacheDataElseLoad (cache prima), returnCacheDataDontLoad (solo cache — modalità offline).

Cache-Control è un’intestazione HTTP che il server invia insieme alla risposta, specificando max-age (durata in secondi), must-revalidate (verificare l’attualità), no-cache (non usare senza verifica) e no-store (non memorizzare nella cache). iOS rispetta rigorosamente queste intestazioni automaticamente quando utilizza URLCache con la politica useProtocolCachePolicy.

Strategie di caching personalizzate e invalidazione

Cache personalizzata è necessaria quando l’URLCache integrato è insufficiente — per archiviare immagini elaborate, modelli di dati serializzati o risultati di calcoli. In questi casi, gli sviluppatori creano il proprio sistema di caching basato sulla directory Caches nel Sandbox dell’app.

swift
class DiskCache<T: Codable> {
    private let cacheDir: URL
    private let encoder = JSONEncoder()
    private let decoder = JSONDecoder()

    init() {
        let paths = FileManager.default
            .urls(for: .cachesDirectory,
                     in: .userDomainMask)
        cacheDir = paths[0].appendingPathComponent(
            "data-cache", isDirectory: true
        )
        try? FileManager.default
            .createDirectory(at: cacheDir,
                             withIntermediateDirectories: true)
    }

    func set(value: T, for key: String) {
        let url = cacheDir.appendingPathComponent(
            SHA256.hash(key)
        )
        if let data = try? encoder.encode(value) {
            try? data.write(to: url)
        }
    }

    func get(for key: String) -> T? {
        let url = cacheDir.appendingPathComponent(
            SHA256.hash(key)
        )
        guard let data = try? Data(contentsOf: url) else { return nil }
        return try? decoder.decode(T.self, from: data)
    }

    func clearAll() {
        try? FileManager.default
            .removeItem(at: cacheDir)
    }
}

Strategie di invalidazione della cache determinano quando i dati archiviati sono considerati obsoleti: TTL (Time-To-Live) — i dati vivono un tempo fisso dopo la scrittura; basata su eventi — invalidazione basata su un evento (es. aggiornamento dei dati sul server); basata sulla versione — invalidazione al cambiamento della versione dell’API o del formato dei dati; LRU (Least Recently Used) — rimozione automatica delle voci meno utilizzate al superamento del limite di dimensione.

Regola pratica: TTL è adatto per notizie e contenuti che diventano obsoleti in modo prevedibile. Basata su eventi per i dati gestiti dal server tramite notifiche push. Basata sulla versione per configurazioni e cache di modelli dati. LRU è una scelta universale per file multimediali con spazio su disco limitato.

Prestazioni e limiti della cache

Le prestazioni di Disk Cache sono misurate dal rapporto di successo (hit ratio) — la percentuale di richieste soddisfatte dalla cache senza chiamata di rete. Un rapporto di successo tipico per una cache di immagini ben configurata è del 70–90%, per le risposte API — 40–60%, per lo streaming video — 30–50%.

Tipo di datiRapporto di successo tipicoDimensione cache consigliata
Immagini70–90%100–500 MB
Risposte API JSON40–60%10–50 MB
Video/Audio30–50%500 MB — 1 GB
Font e risorse90–99%5–20 MB
Contenuti web50–70%50–200 MB

Limiti di Disk Cache in iOS: il sistema può eliminare il contenuto della directory Caches in qualsiasi momento quando lo spazio su disco è insufficiente. Questo comportamento non è configurabile — iOS decide quando e quali file della cache eliminare. Pertanto, la cache non deve contenere dati che non possono essere recuperati dalla rete o da altre fonti.

Impatto sulla memoria flash: la scrittura frequente su Disk Cache accelera l’usura dell’archiviazione flash. iOS utilizza TRIM e wear leveling per ridurre al minimo l’usura, ma si consiglia agli sviluppatori di evitare scritture eccessive: non aggiornare la cache più di una volta ogni 5 minuti per lo stesso file; raggruppare le piccole scritture; utilizzare NSCache per i dati temporanei che non devono essere mantenuti su disco.

Best practice per il caching in iOS

Cache a due livelli è l’architettura standard per le app iOS: memoria (NSCache) per i dati a cui si accede frequentemente e disco (URLCache o personalizzata) per i dati che devono persistere tra le sessioni. Durata in memoria — minuti, su disco — ore o giorni.

Caching delle immagini: utilizza librerie specializzate (Kingfisher, SDWebImage, Nuke) che implementano una cache a due livelli con invalidazione automatica, gestione della memoria e scrittura asincrona su disco. L’implementazione di una cache di immagini personalizzata richiede la considerazione della decodifica, dello spazio colore e del ridimensionamento.

Cache e sicurezza: non memorizzare dati sensibili (password, token, dati personali) su disco senza crittografia. URLCache non crittografa i dati per impostazione predefinita — utilizza NSFileProtection o la crittografia a livello di applicazione per i contenuti sensibili. Per le richieste di rete autorizzate, utilizza la politica .reloadIgnoringLocalCacheData.

Monitoraggio della cache: monitora il rapporto di successo, la dimensione attuale della cache e le scritture al minuto. Se il rapporto di successo scende sotto il 30%, la cache è inefficiente e richiede una revisione della strategia o un aumento delle dimensioni. Secondo Point-Free (2024), il monitoraggio della cache è una delle pratiche di ottimizzazione delle prestazioni delle app iOS più sottovalutate.

Domande frequenti

Cos’è Disk Cache in iOS?

Disk Cache è una tecnologia per archiviare dati sul disco del dispositivo per accelerare l’accesso ripetuto. L’URLCache integrato di iOS memorizza nella cache le risposte HTTP e gli sviluppatori possono creare cache personalizzate attraverso la directory Caches.

In che cosa Disk Cache si differenzia dalla RAM Cache?

RAM Cache (NSCache) archivia i dati nella RAM — più veloce, ma persa al riavvio dell’app. Disk Cache è più lento ma persiste tra le sessioni. La strategia ottimale utilizza entrambi i livelli: memoria per i dati caldi, disco per i dati freddi.

iOS può eliminare la mia cache?

, il sistema può eliminare il contenuto della directory Caches in qualsiasi momento quando lo spazio su disco è insufficiente. Pertanto, non archiviare mai dati irrecuperabili nella cache. Utilizza la directory Documents per i documenti utente.

Come scegliere la giusta dimensione della cache?

La dimensione della cache dipende dal tipo di dati: 100–500 MB per le immagini, 10–50 MB per le risposte API, fino a 1 GB per i video. Monitora il rapporto di successo — se scende sotto il 50%, aumenta la dimensione della cache o modifica la strategia di invalidazione.

Come cancellare la cache in un’app iOS?

URLCache.removeAllCachedResponses() cancella la cache integrata. Per la cache personalizzata, elimina i file dalla directory Caches tramite FileManager. Offri sempre agli utenti la possibilità di cancellare la cache nelle impostazioni dell’app.

Riepilogo

  • Disk Cache — archiviazione temporanea dei dati su disco per un accesso ripetuto più rapido e traffico ridotto
  • URLCache — cache integrata Foundation per richieste HTTP con supporto Cache-Control
  • Directory Caches — directory Sandbox per dati temporanei, cancellata dal sistema quando lo spazio è insufficiente
  • Invalidazione eseguita per TTL, evento, versione o LRU — la scelta dipende dal tipo di dati
  • Rapporto di successo — metrica chiave di efficienza della cache: 70%+ per immagini, 40–60% per API
  • Cache a due livelli (RAM + Disco) — architettura standard per le app iOS
  • Sicurezza — i dati sensibili non devono essere memorizzati nella cache su disco senza crittografia

Svilupperemo un'applicazione mobile chiavi in mano

IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.

Discuti il progetto

Leggi anche