Caches Directory: definizione, gestione della cache e pulizia dei dati

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

Caches Directory è una directory nella sandbox dell’applicazione iOS progettata per memorizzare dati temporanei che possono essere ripristinati o ricaricati dalla rete. Secondo Apple File System Basics (2024), il sistema può eliminare i file dal Caches Directory in qualsiasi momento per liberare spazio su disco. L’applicazione deve gestire correttamente l’assenza di questi file e ripristinarli quando necessario. A differenza del Documents Directory, i dati di Caches non sono inclusi nei backup di iCloud e iTunes, riducendo il carico sull’archiviazione cloud dell’utente.

Punti Chiave

  • Caches Directory è un archivio temporaneo per dati che possono essere ripristinati dalla rete o ricreati.
  • Il sistema iOS può in qualsiasi momento eliminare file da Caches quando lo spazio sul dispositivo è scarso.
  • I dati di Caches non sono inclusi nei backup di iCloud e iTunes.
  • Il percorso della directory si ottiene tramite NSCachesDirectory o FileManager.urls(for: .cachesDirectory).
  • La differenza principale da Documents: Caches non è destinato ai dati utente la cui perdita sarebbe critica.

Cos’è il Caches Directory in iOS?

Caches Directory è una directory all’interno del sandbox dell’applicazione iOS ottimizzata per memorizzare dati che possono essere ripristinati quando necessario. A differenza del Documents Directory, Caches non è destinato ai dati utente, ma è un archivio temporaneo per accelerare le prestazioni dell’applicazione.

iOS utilizza il Caches Directory per memorizzare risposte di rete memorizzate nella cache, immagini precaricate, oggetti serializzati e dati che l’applicazione può ripristinare. Gli sviluppatori non devono fare affidamento sull’archiviazione a lungo termine in questa directory.

Secondo Apple WWDC 2020, circa il 40% delle applicazioni iOS utilizza il Caches Directory per memorizzare immagini e dati di rete nella cache, mentre il 25% degli sviluppatori inserisce erroneamente in Caches dati che dovrebbero trovarsi in Documents o Application Support per non aver compreso le differenze tra queste directory.

Una proprietà critica di Caches: l’applicazione deve gestire correttamente le situazioni in cui un file della cache è stato eliminato dal sistema. Se la rimozione della cache compromette le funzionalità dell’applicazione, allora i dati sono archiviati nella directory sbagliata.

Come ottenere il percorso del Caches Directory

In Swift, il percorso del Caches Directory si ottiene utilizzando il metodo standard di FileManager con .cachesDirectory. È un’operazione semplice utilizzata in praticamente ogni applicazione iOS che lavora con dati di rete.

swift
import Foundation

let fileManager = FileManager.default
guard let cachesURL = fileManager.urls(
    for: .cachesDirectory,
    in: .userDomainMask
).first else { return }

// Save cached JSON
let cacheFile = cachesURL.appendingPathComponent("feed_cache.json")
let jsonData = try JSONSerialization.data(
    withJSONObject: response,
    options: [.prettyPrinted]
)
try jsonData.write(to: cacheFile)

Objective-C utilizza NSSearchPathForDirectoriesInDomains con NSCachesDirectory. Sebbene Apple raccomandi l’API Swift, il codice Objective-C con Caches Directory rimane funzionante e supportato.

objective-c
@import Foundation;

NSArray *paths = NSSearchPathForDirectoriesInDomains(
    NSCachesDirectory,
    NSUserDomainMask,
    YES
);
NSString *cachesPath = paths.firstObject;
NSString *cacheFile = [cachesPath stringByAppendingPathComponent:@"feed_cache.plist"];

I progetti Swift dovrebbero preferire l’API basata su URL: è type-safe e si integra meglio con framework moderni come SwiftUI e Combine.

Quali dati archiviare in Caches

Caches Directory è ottimale per diverse categorie di dati che l’applicazione utilizza per accelerare le prestazioni, ma non è l’unica fonte di verità. Scegliere i dati giusti per la cache influisce direttamente sull’UX e sulle prestazioni dell’applicazione.

Risposte di rete memorizzate nella cache

Risposte JSON dalle API, dati dei feed di notizie, elenchi di oggetti. Tutto ciò che l’applicazione può scaricare nuovamente dal server. Utilizza URLCache per la memorizzazione automatica nella cache delle risposte HTTP o salva manualmente gli oggetti serializzati.

Immagini e file multimediali

Le immagini scaricate dalla rete sono il caso d’uso più comune del Caches Directory. Librerie come SDWebImage e Kingfisher salvano le immagini memorizzate nella cache in Caches per impostazione predefinita.

Tipo di datoAdatto per CachesPeriodo di conservazione
JSON risposte APIFino alla pulizia del sistema
Immagini dalla reteFino alla pulizia del sistema
Log di debugCondizionaleMeglio in tmp
Salvataggi di giochiNoSolo Documents
Configurazioni appNoApplication Support

Se i dati non possono essere ripristinati, non appartengono a Caches. Questo è il criterio più semplice: immagina che domani il sistema elimini tutti i file da Caches. Se l’applicazione continua a funzionare correttamente, i dati sono archiviati correttamente.

Come il sistema gestisce la pulizia della cache

iOS gestisce automaticamente la pulizia del Caches Directory, ma i trigger e gli algoritmi esatti non sono documentati da Apple. È noto che il sistema può eliminare file da Caches quando lo spazio su disco è scarso, così come quando la funzione Offload Unused Apps è attiva.

Il processo di pulizia è trasparente per l’applicazione: il sistema elimina i file senza notifica. L’applicazione deve verificare l’esistenza del file prima di leggerlo e ricrearlo se assente. Non fare affidamento sull’archiviazione a lungo termine è un requisito fondamentale quando si lavora con Caches.

Secondo l’articolo di Apple “File System Basics” (2024), l’applicazione non deve aspettarsi che i file nel Caches Directory siano disponibili tra sessioni diverse. Si raccomanda agli sviluppatori di implementare un meccanismo di fallback: se un file nella cache è mancante, scarica i dati dalla rete e salvali nuovamente in Caches.

Uno scenario separato è lo scaricamento dell’applicazione (Offload). Quando questa funzione viene attivata, iOS rimuove l’applicazione ma conserva il suo Documents Directory. Il Caches Directory viene eliminato nel processo. Un utente che ripristina l’applicazione non avrà dati nella cache. L’applicazione deve scaricarli nuovamente.

Caches Directory vs Temporary Directory

La differenza tra le directory Caches e Temporary (tmp) spesso causa confusione tra gli sviluppatori. Entrambe le directory archiviano dati temporanei, ma con diverse garanzie di durata e scopi.

CaratteristicaCaches DirectoryTemporary Directory
DurataDa sessione a sessione (non garantita)Solo all’interno di una sessione
Pulizia del sistemaQuando lo spazio è scarsoAl termine della sessione o al riavvio
ScopoCache per accelerare le prestazioniDati molto temporanei
EsempioImmagini nella cacheFile temporaneo prima dell’esportazione
BackupNoNo

Scegli Caches se è utile conservare i dati tra gli avvii dell’applicazione ma possono essere ripristinati. Usa tmp se i dati sono necessari solo nella sessione corrente e non hanno valore dopo la chiusura dell’applicazione.

Buone pratiche con Caches

Lavorare con il Caches Directory richiede il rispetto di diverse regole che aiutano a evitare la perdita di dati, comportamenti imprevisti dell’applicazione e problemi di prestazioni.

Verifica sempre l’esistenza del file prima di leggerlo

FileManager.fileExists(atPath:) deve essere chiamato prima di ogni lettura da Caches. Se il file è mancante, carica i dati dalla fonte originale e salvali nella cache. Non presumere mai che un file in Caches esista.

Limita la dimensione della cache

Imposta una dimensione massima per il Caches Directory nella tua applicazione. Ad esempio, un limite di 50 MB per le immagini e 10 MB per le risposte JSON. Quando il limite viene superato, elimina i file più vecchi per data di modifica.

swift
import Foundation

func trimCache(to maxSizeBytes: Int) {
    let cachesURL = FileManager.default
        .urls(for: .cachesDirectory, in: .userDomainMask)
        .first!

    guard let enumerator = FileManager.default
        .enumerator(
            at: cachesURL,
            includingPropertiesForKeys: [.fileSizeKey, .contentModificationDateKey]
        )
    else { return }

    // Enumerate and remove old files
    // when exceeding size limit
}

Seguire queste buone pratiche garantisce che l’applicazione funzioni correttamente indipendentemente dalle azioni di pulizia della cache del sistema e che gli utenti non subiscano perdite impreviste di dati.

Domande Frequenti

Il sistema notifica l’applicazione prima di pulire il Caches Directory?

No, iOS non invia notifiche prima di eliminare file da Caches. Il processo di pulizia è completamente trasparente per l’applicazione. L’unico modo per scoprire un’eliminazione è quando si tenta di leggere un file. FileManager restituisce nil o genera un errore, e l’applicazione deve gestire questa situazione.

L’utente può pulire manualmente il Caches Directory?

Gli utenti non hanno accesso diretto al Caches Directory tramite Files o iTunes. Tuttavia, possono pulire la cache di tutte le applicazioni tramite Impostazioni > Generali > Archiviazione, selezionare un’applicazione specifica e toccare “Scarica App.” iOS può anche pulire automaticamente la cache quando lo spazio è scarso.

In cosa differisce URLCache dal salvataggio manuale in Caches Directory?

URLCache è un meccanismo integrato di caching delle richieste HTTP di Foundation. Salva e carica automaticamente le risposte nella cache, utilizzando internamente il Caches Directory. Il salvataggio manuale offre maggiore controllo: puoi scegliere il formato, crittografare i dati e gestire la durata di ogni file individualmente.

Cosa succede al Caches Directory durante l’aggiornamento dell’applicazione?

Durante l’aggiornamento dell’applicazione tramite l’App Store, il Caches Directory viene conservato. Tuttavia, il contenuto può essere eliminato dal sistema se il nuovo aggiornamento richiede più spazio per l’installazione. Lo sviluppatore non deve fare affidamento sulla persistenza di Caches dopo un aggiornamento. Questo è un motivo aggiuntivo per implementare un meccanismo di fallback.

Come disabilitare la memorizzazione automatica nella cache per NSURLSession?

Imposta URLCache su nil per una sessione NSURLSession specifica o utilizza la politica di cache .reloadIgnoringLocalCacheData. Puoi anche creare una URLSessionConfiguration con cache vuota: sessionConfiguration.urlCache = nil. Questo è utile per i dati che devono essere sempre aggiornati.

Riepilogo

  • Caches Directory è un archivio temporaneo per dati che possono essere ripristinati dalla rete o ricreati.
  • Il sistema iOS può in qualsiasi momento eliminare file da Caches senza notificare l’applicazione.
  • I dati di Caches non sono inclusi nei backup di iCloud e iTunes, risparmiando spazio.
  • Il percorso della directory è FileManager.urls(for: .cachesDirectory) in Swift o NSSearchPathForDirectoriesInDomains in Objective-C.
  • Caches memorizza immagini nella cache, risposte JSON delle API e altri dati recuperabili.
  • A differenza di tmp, Caches può conservare i dati tra gli avvii, ma senza garanzie.
  • Verifica sempre l’esistenza del file prima di leggere da Caches e implementa il caricamento di fallback.

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