Disk Cache: vad är det, iOS-diskcache och funktionsprinciper

Författare: IT Sectr Publicerad: 2026-07-11 Lästid: 7 min

Disk Cache — är en mekanism för tillfällig lagring av data på enhetens disk, som gör det möjligt för iOS-appar att snabba upp återkommande åtkomst till tidigare laddade resurser. Enligt Apple Developer Documentation, 2024 minskar Disk Cache nätverksanvändningen, minskar belastningen på batteriet och säkerställer att appen fungerar i offline-läge. iOS tillhandahåller flera inbyggda cachningsmekanismer: URLCache för nätverksförfrågningar, NSCache för RAM-minne och anpassade implementeringar via Caches-katalogen.

Huvudpunkter

  • Disk Cache — lagring av data på disk för att snabba upp återkommande åtkomst och minska trafik
  • URLCache — inbyggd mekanism för cachning av HTTP-förfrågningar i iOS
  • Caches directory — särskild Sandbox-katalog för appens tillfälliga data
  • Ogiltigförklaring av cache är avgörande för datans aktualitet — strategier baserade på tid, händelse och version
  • Systemet kan rensa cachen vid brist på utrymme — cachen bör inte innehålla oersättlig data

Vad är Disk Cache i iOS?

Disk Cache — är en teknik för tillfällig lagring av data på enhetens permanenta lagringsmedium (flashminne) för att påskynda efterföljande förfrågningar till samma data. Till skillnad från RAM-cache bevarar Disk Cache data efter omstart av appen och även enheten.

iOS erbjuder två huvudsakliga cachningsnivåer: operativ (NSCache, minne) och disk (URLCache, filsystem). Disk-cache är 10–100 gånger långsammare än operativ cache, men betydligt snabbare än en nätverksförfrågan — skillnaden kan vara 2 till 3 storleksordningar. Den optimala strategin använder en två-nivåers cache: minne för het data och disk för kall data.

Enligt Apple Performance Optimization Guide, 2023 minskar en korrekt konfigurerad Disk Cache laddningstiden för innehåll med 60–80% för återkommande visningar och minskar trafikförbrukningen med 40–70%. För appar med mediainnehåll (bilder, video, ljud) är cachning en kritisk UX-faktor.

URLCache: inbyggd cachningsmekanism

URLCache — är en inbyggd Foundation-klass som implementerar en kombinerad cache för URLSession-förfrågningar. Den sparar automatiskt serversvar på disk och i minne, och hanterar cache-storlek och ogiltigförklaringspolicyer baserat på HTTP-rubrikerna Cache-Control, Expires och 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)

Cachningspolicyer URLCache bestämmer när cachad data ska användas och när en ny förfrågan ska göras. Huvudsakliga policyer: useProtocolCachePolicy (baserat på serverrubriker), reloadIgnoringLocalCacheData (alltid från servern), returnCacheDataElseLoad (först cachen), returnCacheDataDontLoad (endast cache — offline-läge).

Cache-Control — HTTP-rubrik som servern skickar tillsammans med svaret, som anger max-age (livslängd i sekunder), must-revalidate (kontrollera aktualitet), no-cache (använd inte utan verifiering) och no-store (cacha inte). iOS följer strikt dessa rubriker automatiskt när URLCache används med policyn useProtocolCachePolicy.

Anpassade cachningsstrategier och ogiltigförklaring

Anpassad cache är nödvändig när den inbyggda URLCache inte räcker till: för lagring av bearbetade bilder, serialiserade datamodeller eller beräkningsresultat. I sådana fall skapar utvecklaren sitt eget cachningssystem baserat på Caches-katalogen i appens Sandbox.

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

Ogiltigförklaringsstrategier för cache bestämmer när lagrad data anses föråldrad: TTL (Time-To-Live) — data lever en fast tid efter skrivning; event-driven — ogiltigförklaring vid en händelse (t.ex. datauppdatering på servern); version-based — ogiltigförklaring vid ändring av API-version eller dataformat; LRU (Least Recently Used) — automatisk borttagning av minst använda poster när storleksgränsen överskrids.

Praktisk regel: TTL är lämplig för nyheter och innehåll som blir föråldrat på ett förutsägbart sätt. Event-driven — för data som hanteras av servern via push-notiser. Version-based — för konfigurationer och datamodell-cache. LRU — universellt val för mediafiler med begränsat diskutrymme.

Cache-prestanda och begränsningar

Prestanda för Disk Cache mäts med hit ratio — andelen förfrågningar som besvaras från cachen utan nätverksåtkomst. Typisk hit ratio för en välkonfigurerad bildcache är 70–90%, för API-svar — 40–60%, för strömmande video — 30–50%.

DatatypTypisk hit ratioRekommenderad cache-storlek
Bilder70–90%100–500 MB
API JSON-svar40–60%10–50 MB
Video/ljud30–50%500 MB — 1 GB
Typsnitt och resurser90–99%5–20 MB
Webbinnehåll50–70%50–200 MB

Begränsningar för Disk Cache i iOS: systemet kan när som helst ta bort innehållet i Caches-katalogen vid brist på diskutrymme. Detta beteende går inte att konfigurera — iOS bestämmer själv när och vilka cache-filer som ska tas bort. Därför bör cachen inte innehålla data som inte kan återställas från nätverket eller andra källor.

Påverkan på flashminne: frekvent skrivning till Disk Cache påskyndar slitage på flashminnet. iOS använder TRIM och wear leveling för att minimera slitaget, men utvecklare rekommenderas att undvika överdriven skrivning: uppdatera inte cachen oftare än en gång var 5:e minut för samma fil; gruppera små skrivningar till en; använd NSCache för tillfällig data som inte behöver lagras på disk.

Bästa praxis för cachning i iOS

Två-nivåers cache — standardarkitektur för iOS-appar: minne (NSCache) för data som ofta nås och disk (URLCache eller anpassad) för data som ska bevaras mellan sessioner. Livslängd i minnet — minuter, på disk — timmar eller dagar.

Cachning av bilder: använd specialiserade bibliotek (Kingfisher, SDWebImage, Nuke) som implementerar två-nivåers cache med automatisk ogiltigförklaring, minneshantering och asynkron skrivning till disk. Egen implementering av bildcache kräver hänsyn till avkodning, färgrymd och skalning.

Cache och säkerhet: cacha inte konfidentiell data (lösenord, tokens, personuppgifter) på disk utan kryptering. URLCache krypterar inte data som standard — använd NSFileProtection eller kryptering på applikationsnivå för känsligt innehåll. För nätverksförfrågningar med autentisering, använd policyn .reloadIgnoringLocalCacheData.

Cache-övervakning: övervaka hit ratio, aktuell cache-storlek och antal skrivningar per minut. Om hit ratio sjunker under 30% — är cachen ineffektiv och kräver översyn av strategin eller ökning av storleken. Enligt Point-Free (2024) är cache-övervakning en av de mest underskattade praxis för prestandaoptimering av iOS-appar.

Vanliga frågor

Vad är Disk Cache i iOS?

Disk Cache — teknik för lagring av data på enhetens disk för att snabba upp återkommande åtkomst. I iOS cachar den inbyggda URLCache HTTP-svar, och utvecklare kan skapa anpassade cachar via Caches-katalogen.

Hur skiljer sig Disk Cache från RAM Cache?

RAM Cache (NSCache) lagrar data i RAM-minnet — snabbare, men försvinner vid omstart av appen. Disk Cache är långsammare, men bevaras mellan sessioner. Den optimala strategin använder båda nivåerna: minne för het data, disk för kall data.

Kan iOS ta bort min cache?

Ja, systemet kan när som helst ta bort innehållet i Caches-katalogen vid brist på utrymme. Förvara därför aldrig data i cachen som inte kan återställas. För användardokument, använd Documents-katalogen.

Hur väljer jag rätt cache-storlek?

Cache-storleken beror på datatypen: för bilder 100–500 MB, för API-svar 10–50 MB, för video upp till 1 GB. Övervaka hit ratio — om den sjunker under 50%, öka cache-storleken eller ändra ogiltigförklaringsstrategin.

Hur rensar jag cachen i en iOS-app?

URLCache.removeAllCachedResponses() rensar den inbyggda cachen. För anpassad cache, ta bort filer från Caches-katalogen via FileManager. Ge alltid användaren möjlighet att rensa cachen i appens inställningar.

Sammanfattning

  • Disk Cache — tillfällig lagring av data på disk för att snabba upp återkommande åtkomst och minska trafik
  • URLCache — inbyggd Foundation-mekanism för cachning av HTTP-förfrågningar med Cache-Control-stöd
  • Caches directory — Sandbox-katalog för tillfällig data, rensas av systemet vid brist på utrymme
  • Ogiltigförklaring av cache sker via TTL, händelse, version eller LRU — valet beror på datatypen
  • Hit ratio — nyckeltal för cache-effektivitet: 70%+ för bilder, 40–60% för API
  • Två-nivåers cache (RAM + Disk) — standardarkitektur för iOS-appar
  • Säkerhet — konfidentiell data bör inte cachas på disk utan kryptering

Vi utvecklar en mobil applikation nyckelfärdigt

IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.

Diskutera projektet

Läs också