Disk Cache: ce este, cache-ul pe disc iOS și principii de funcționare

Autor: IT Sectr Publicat: 2026-07-11 Timp de citire: 7 min

Disk Cache — este un mecanism de stocare temporară a datelor pe discul dispozitivului, permițând aplicațiilor iOS să accelereze accesul repetat la resursele încărcate anterior. Conform Apple Developer Documentation, 2024, Disk Cache reduce utilizarea rețelei, scade încărcarea bateriei și asigură funcționarea aplicației în modul offline. iOS oferă mai multe mecanisme integrate de cache: URLCache pentru cereri de rețea, NSCache pentru memoria RAM și implementări personalizate prin directorul Caches.

Principalele puncte

  • Disk Cache — stocarea datelor pe disc pentru accelerarea accesului repetat și reducerea traficului
  • URLCache — mecanism integrat de cache pentru cereri HTTP în iOS
  • Caches directory — directorul Sandbox special pentru datele temporare ale aplicației
  • Invalidarea cache-ului este critică pentru actualitatea datelor — strategii bazate pe timp, eveniment și versiune
  • Sistemul poate șterge cache-ul când spațiul este insuficient — cache-ul nu trebuie să conțină date de neînlocuit

Ce este Disk Cache în iOS?

Disk Cache — este o tehnologie de stocare temporară a datelor pe suportul permanent al dispozitivului (memoria flash) pentru a accelera cererile ulterioare către aceleași date. Spre deosebire de cache-ul RAM, Disk Cache păstrează datele după repornirea aplicației și chiar a dispozitivului.

iOS oferă două niveluri principale de cache: operațional (NSCache, memorie) și pe disc (URLCache, sistem de fișiere). Cache-ul pe disc este de 10–100 de ori mai lent decât cel operațional, dar semnificativ mai rapid decât o cerere de rețea — diferența poate fi de 2 până la 3 ordine de mărime. Strategia optimă utilizează un cache pe două niveluri: memoria pentru datele fierbinți și discul pentru datele reci.

Conform Apple Performance Optimization Guide, 2023, un Disk Cache configurat corect reduce timpul de încărcare a conținutului cu 60–80% pentru vizualizări repetate și scade consumul de trafic cu 40–70%. Pentru aplicațiile cu conținut media (imagini, video, audio), cache-ul este un factor critic pentru UX.

URLCache: mecanismul integrat de cache

URLCache — este o clasă integrată Foundation care implementează un cache combinat pentru cererile URLSession. Aceasta salvează automat răspunsurile serverului pe disc și în memorie, gestionând dimensiunea cache-ului și politicile de invalidare pe baza antetelor HTTP Cache-Control, Expires și 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)

Politicile de cache URLCache determină când să utilizeze datele din cache și când să execute o nouă cerere. Principalele politici: useProtocolCachePolicy (pe baza antetelor serverului), reloadIgnoringLocalCacheData (întotdeauna de la server), returnCacheDataElseLoad (mai întâi cache-ul), returnCacheDataDontLoad (doar cache-ul — modul offline).

Cache-Control — antetul HTTP pe care serverul îl trimite împreună cu răspunsul, indicând max-age (timpul de viață în secunde), must-revalidate (verificarea actualității), no-cache (nu utiliza fără verificare) și no-store (nu stoca în cache). iOS respectă strict aceste antete automat când utilizează URLCache cu politica useProtocolCachePolicy.

Strategii personalizate de cache și invalidare

Cache-ul personalizat este necesar când URLCache integrat nu este suficient: pentru stocarea imaginilor procesate, modelelor de date serializate sau rezultatelor calculelor. În astfel de cazuri, dezvoltatorul își creează propriul sistem de cache bazat pe directorul Caches din Sandbox-ul aplicației.

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)
    }
}

Strategiile de invalidare a cache-ului determină când datele stocate sunt considerate învechite: TTL (Time-To-Live) — datele trăiesc un timp fix după scriere; event-driven — invalidare la apariția unui eveniment (de exemplu, actualizarea datelor pe server); version-based — invalidare la schimbarea versiunii API sau a formatului datelor; LRU (Least Recently Used) — ștergerea automată a celor mai puțin utilizate înregistrări la depășirea limitei de dimensiune.

Regula practică: TTL este potrivit pentru știri și conținut care îmbătrânește previzibil. Event-driven — pentru date gestionate de server prin notificări push. Version-based — pentru configurații și cache-ul modelelor de date. LRU — alegere universală pentru fișiere media cu spațiu pe disc limitat.

Performanța și limitările cache-ului

Performanța Disk Cache se măsoară prin hit ratio — procentul cererilor satisfăcute din cache fără a accesa rețeaua. Hit ratio-ul tipic pentru un cache de imagini bine configurat este de 70–90%, pentru răspunsurile API — 40–60%, pentru video în flux — 30–50%.

Tip de dateHit ratio tipicDimensiune recomandată a cache-ului
Imagini70–90%100–500 MB
Răspunsuri API JSON40–60%10–50 MB
Video/audio30–50%500 MB — 1 GB
Fonturi și resurse90–99%5–20 MB
Conținut web50–70%50–200 MB

Limitările Disk Cache în iOS: sistemul poate șterge conținutul directorului Caches în orice moment când spațiul pe disc este insuficient. Acest comportament nu poate fi configurat — iOS decide singur când și ce fișiere cache să șteargă. Prin urmare, cache-ul nu trebuie să conțină date care nu pot fi recuperate din rețea sau din alte surse.

Impactul asupra memoriei flash: scrierea frecventă în Disk Cache accelerează uzura memoriei flash. iOS utilizează TRIM și wear leveling pentru a minimiza uzura, dar dezvoltatorilor li se recomandă să evite scrierile excesive: să nu actualizeze cache-ul mai des decât o dată la 5 minute pentru același fișier; să grupeze scrierile mici într-una singură; să utilizeze NSCache pentru date temporare care nu trebuie stocate pe disc.

Cele mai bune practici de cache în iOS

Cache-ul pe două niveluri — arhitectura standard pentru aplicațiile iOS: memoria (NSCache) pentru datele accesate frecvent și discul (URLCache sau personalizat) pentru datele care trebuie păstrate între sesiuni. Durata de viață în memorie — minute, pe disc — ore sau zile.

Cache-ul imaginilor: utilizați biblioteci specializate (Kingfisher, SDWebImage, Nuke), care implementează un cache pe două niveluri cu invalidare automată, gestionarea memoriei și scriere asincronă pe disc. Implementarea proprie a cache-ului de imagini necesită luarea în considerare a decodării, spațiului de culoare și scalării.

Cache-ul și securitatea: nu stocați în cache date confidențiale (parole, token-uri, date personale) pe disc fără criptare. URLCache implicit nu criptează datele — utilizați NSFileProtection sau criptarea la nivel de aplicație pentru conținut sensibil. Pentru cererile de rețea cu autentificare, utilizați politica .reloadIgnoringLocalCacheData.

Monitorizarea cache-ului: urmăriți hit ratio, dimensiunea curentă a cache-ului și numărul de scrieri pe minut. Dacă hit ratio scade sub 30% — cache-ul este ineficient și necesită revizuirea strategiei sau mărirea dimensiunii. Conform Point-Free (2024), monitorizarea cache-ului este una dintre cele mai subestimate practici de optimizare a performanței aplicațiilor iOS.

Întrebări frecvente

Ce este Disk Cache în iOS?

Disk Cache — tehnologie de stocare a datelor pe discul dispozitivului pentru a accelera accesul repetat. În iOS, URLCache integrat stochează în cache răspunsurile HTTP, iar dezvoltatorii pot crea cache-uri personalizate prin directorul Caches.

Cu ce se deosebește Disk Cache de RAM Cache?

RAM Cache (NSCache) stochează datele în memoria RAM — este mai rapid, dar se pierde la repornirea aplicației. Disk Cache este mai lent, dar se păstrează între sesiuni. Strategia optimă utilizează ambele niveluri: memoria pentru date fierbinți, discul pentru date reci.

Poate iOS să șteargă cache-ul meu?

Da, sistemul poate șterge conținutul directorului Caches în orice moment când spațiul este insuficient. Prin urmare, nu stocați niciodată în cache date care nu pot fi recuperate. Pentru documentele utilizatorului, utilizați directorul Documents.

Cum să aleg dimensiunea potrivită a cache-ului?

Dimensiunea cache-ului depinde de tipul datelor: pentru imagini 100–500 MB, pentru răspunsuri API 10–50 MB, pentru video până la 1 GB. Urmăriți hit ratio — dacă scade sub 50%, măriți dimensiunea cache-ului sau schimbați strategia de invalidare.

Cum să șterg cache-ul într-o aplicație iOS?

URLCache.removeAllCachedResponses() șterge cache-ul integrat. Pentru cache-ul personalizat, ștergeți fișierele din directorul Caches prin FileManager. Oferiți întotdeauna utilizatorului posibilitatea de a șterge cache-ul în setările aplicației.

Rezumat

  • Disk Cache — stocarea temporară a datelor pe disc pentru accelerarea accesului repetat și reducerea traficului
  • URLCache — mecanismul integrat Foundation pentru cache-ul cererilor HTTP cu suport Cache-Control
  • Caches directory — directorul Sandbox pentru date temporare, șters de sistem la lipsa spațiului
  • Invalidarea cache-ului se face prin TTL, eveniment, versiune sau LRU — alegerea depinde de tipul datelor
  • Hit ratio — metrica cheie a eficienței cache-ului: 70%+ pentru imagini, 40–60% pentru API
  • Cache pe două niveluri (RAM + Disc) — arhitectura standard pentru aplicațiile iOS
  • Securitatea — datele confidențiale nu trebuie stocate în cache pe disc fără criptare

Vom dezvolta o aplicație mobilă la cheie

IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.

Discutați proiectul

Citiți și