Disk Cache — is een mechanisme voor tijdelijke opslag van gegevens op de schijf van het apparaat, waarmee iOS-apps herhaalde toegang tot eerder geladen bronnen kunnen versnellen. Volgens Apple Developer Documentation, 2024 vermindert Disk Cache het netwerkgebruik, verlaagt het de batterijbelasting en zorgt het voor offline werking van de app. iOS biedt verschillende ingebouwde cachiimechanismen: URLCache voor netwerkverzoeken, NSCache voor werkgeheugen en aangepaste implementaties via de Caches-directory.
Belangrijkste punten
Disk Cache — is een technologie voor tijdelijke opslag van gegevens op het permanente opslagmedium van het apparaat (flashgeheugen) om volgende verzoeken naar dezelfde gegevens te versnellen. In tegenstelling tot RAM-cache behoudt Disk Cache gegevens na het herstarten van de app en zelfs het apparaat.
iOS biedt twee hoofdniveaus van caching: operationeel (NSCache, geheugen) en schijf (URLCache, bestandssysteem). Schijfcache is 10–100 keer langzamer dan operationele cache, maar aanzienlijk sneller dan een netwerkverzoek — het verschil kan 2 tot 3 ordes van grootte zijn. De optimale strategie gebruikt een tweelaagse cache: geheugen voor hete gegevens en schijf voor koude gegevens.
Volgens de Apple Performance Optimization Guide, 2023 vermindert een correct geconfigureerde Disk Cache de laadtijd van inhoud met 60–80% voor herhaalde weergaven en verlaagt het dataverbruik met 40–70%. Voor apps met mediainhoud (afbeeldingen, video, audio) is caching een kritieke UX-factor.
URLCache — is een ingebouwde Foundation-klasse die een gecombineerde cache implementeert voor URLSession-verzoeken. Het slaat automatisch serverreacties op op schijf en in geheugen, en beheert de cachegrootte en invalidatiebeleid op basis van HTTP-headers Cache-Control, Expires en ETag.
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)
Cachingbeleid van URLCache bepaalt wanneer gecachte gegevens moeten worden gebruikt en wanneer een nieuw verzoek moet worden uitgevoerd. Belangrijkste beleidsregels: useProtocolCachePolicy (op basis van serverheaders), reloadIgnoringLocalCacheData (altijd van server), returnCacheDataElseLoad (eerst cache), returnCacheDataDontLoad (alleen cache — offline modus).
Cache-Control — HTTP-header die de server samen met het antwoord stuurt, met max-age (levensduur in seconden), must-revalidate (actualiteit controleren), no-cache (niet gebruiken zonder verificatie) en no-store (niet cachen). iOS houdt zich strikt aan deze headers automatisch bij gebruik van URLCache met het beleid useProtocolCachePolicy.
Aangepaste cache is nodig wanneer de ingebouwde URLCache niet volstaat: voor het opslaan van verwerkte afbeeldingen, geserialiseerde gegevensmodellen of rekenresultaten. In dergelijke gevallen maakt de ontwikkelaar zijn eigen cachiimechanisme op basis van de Caches-directory in de Sandbox van de app.
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)
}
}
Invalidatiestrategieën van de cache bepalen wanneer opgeslagen gegevens als verouderd worden beschouwd: TTL (Time-To-Live) — gegevens leven een vaste tijd na het schrijven; event-driven — invalidatie bij een gebeurtenis (bijv. gegevensupdate op de server); version-based — invalidatie bij wijziging van API-versie of gegevensformaat; LRU (Least Recently Used) — automatische verwijdering van minst gebruikte items bij overschrijding van de groottebeperking.
Praktische regel: TTL is geschikt voor nieuws en inhoud die voorspelbaar veroudert. Event-driven — voor gegevens die door de server worden beheerd via pushmeldingen. Version-based — voor configuraties en datamodel-cache. LRU — universele keuze voor mediabestanden met beperkte schijfruimte.
Prestaties van Disk Cache worden gemeten met hit ratio — het percentage verzoeken dat uit de cache wordt bediend zonder netwerktoegang. Typische hit ratio voor een goed geconfigureerde afbeeldingscache is 70–90%, voor API-reacties — 40–60%, voor streaming video — 30–50%.
| Gegevenstype | Typische hit ratio | Aanbevolen cachegrootte |
|---|---|---|
| Afbeeldingen | 70–90% | 100–500 MB |
| API JSON-reacties | 40–60% | 10–50 MB |
| Video/audio | 30–50% | 500 MB — 1 GB |
| Lettertypen en bronnen | 90–99% | 5–20 MB |
| Webinhoud | 50–70% | 50–200 MB |
Beperkingen van Disk Cache in iOS: het systeem kan de inhoud van de Caches-directory op elk moment verwijderen bij gebrek aan schijfruimte. Dit gedrag is niet configureerbaar — iOS beslist zelf wanneer en welke cachebestanden worden verwijderd. Daarom mag de cache geen gegevens bevatten die niet uit het netwerk of andere bronnen kunnen worden hersteld.
Impact op flashgeheugen: frequent schrijven naar Disk Cache versnelt de slijtage van flashgeheugen. iOS gebruikt TRIM en wear leveling om slijtage te minimaliseren, maar ontwikkelaars wordt aangeraden overmatig schrijven te vermijden: cache niet vaker dan eens per 5 minuten bijwerken voor hetzelfde bestand; kleine schrijfacties groeperen in één; NSCache gebruiken voor tijdelijke gegevens die niet op schijf hoeven te worden opgeslagen.
Tweelaagse cache — standaardarchitectuur voor iOS-apps: geheugen (NSCache) voor veelgebruikte gegevens en schijf (URLCache of aangepast) voor gegevens die tussen sessies moeten worden bewaard. Levensduur in geheugen — minuten, op schijf — uren of dagen.
Afbeeldingen cachen: gebruik gespecialiseerde bibliotheken (Kingfisher, SDWebImage, Nuke) die tweelaagse cache implementeren met automatische invalidatie, geheugenbeheer en asynchroon schrijven naar schijf. Zelf een afbeeldingscache implementeren vereist aandacht voor decodering, kleurruimte en schaling.
Cache en beveiliging: cache geen vertrouwelijke gegevens (wachtwoorden, tokens, persoonlijke gegevens) op schijf zonder versleuteling. URLCache versleutelt standaard geen gegevens — gebruik NSFileProtection of versleuteling op app-niveau voor gevoelige inhoud. Gebruik voor netwerkverzoeken met autorisatie het beleid .reloadIgnoringLocalCacheData.
Cachemonitoring: houd hit ratio, huidige cachegrootte en het aantal schrijfbewerkingen per minuut bij. Als hit ratio onder 30% daalt — is de cache inefficiënt en moet de strategie worden herzien of de grootte worden vergroot. Volgens Point-Free (2024) is cachemonitoring een van de meest onderschatte optimalisatiepraktijken voor iOS-app-prestaties.
Veelgestelde vragen
Disk Cache — technologie voor het opslaan van gegevens op de schijf van het apparaat om herhaalde toegang te versnellen. In iOS cachet de ingebouwde URLCache HTTP-reacties en kunnen ontwikkelaars aangepaste caches maken via de Caches-directory.
RAM Cache (NSCache) slaat gegevens op in het werkgeheugen — sneller, maar gaat verloren bij herstarten van de app. Disk Cache is langzamer, maar blijft behouden tussen sessies. De optimale strategie gebruikt beide niveaus: geheugen voor hete gegevens, schijf voor koude gegevens.
Ja, het systeem kan de inhoud van de Caches-directory op elk moment verwijderen bij ruimtegebrek. Bewaar daarom nooit gegevens in de cache die niet kunnen worden hersteld. Gebruik voor gebruikersdocumenten de Documents-directory.
De cachegrootte hangt af van het gegevenstype: voor afbeeldingen 100–500 MB, voor API-reacties 10–50 MB, voor video tot 1 GB. Houd de hit ratio bij — als deze onder 50% daalt, vergroot dan de cachegrootte of wijzig de invalidatiestrategie.
URLCache.removeAllCachedResponses() wist de ingebouwde cache. Voor aangepaste cache verwijdert u bestanden uit de Caches-directory via FileManager. Bied de gebruiker altijd de mogelijkheid om de cache te wissen in de app-instellingen.
Samenvatting
We ontwikkelen een mobiele applicatie turnkey
IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.
Lees ook