Caches Directory — är en katalog i sandlådan för iOS-appen, avsedd för lagring av temporär data som kan återställas eller laddas om från nätverket. Enligt Apple File System Basics (2024) kan systemet när som helst ta bort filer från Caches Directory för att frigöra diskutrymme — appen måste korrekt hantera frånvaron av dessa filer och vid behov återställa dem. Till skillnad från Documents Directory inkluderas data från Caches inte i iCloud- och iTunes-säkerhetskopior, vilket minskar belastningen på användarens molnlagring.
Huvudpunkter
Caches Directory — är en katalog inuti sandlådan för iOS-appen, optimerad för lagring av data som kan återställas vid behov. Till skillnad från Documents Directory är Caches inte avsedd för användardata — det är temporär lagring för att påskynda appens funktion.
iOS använder Caches Directory för att placera cachade nätverkssvar, förladdade bilder, serialiserade objekt och data som appen kan återställa. Utvecklaren bör inte förlita sig på långtidslagring av data i denna katalog.
Enligt data från Apple WWDC 2020 använder cirka 40% av iOS-apparna Caches Directory för lagring av cachade bilder och nätverksdata, medan 25% av utvecklarna felaktigt placerar data i Caches som borde finnas i Documents eller Application Support, på grund av bristande förståelse för skillnaderna mellan dessa kataloger.
Kritisk egenskap hos Caches: appen måste korrekt hantera situationen när en cachefil har tagits bort av systemet. Om appens funktionalitet störs efter borttagning av cachen — betyder det att data lagras i fel katalog.
I Swift erhålls sökvägen till Caches Directory med standardmetoden FileManager med .cachesDirectory. Detta är en enkel operation som används i praktiskt taget varje iOS-app som arbetar med nätverksdata.
import Foundation
let fileManager = FileManager.default
guard let cachesURL = fileManager.urls(
for: .cachesDirectory,
in: .userDomainMask
).first else { return }
// Spara cachad JSON
let cacheFile = cachesURL.appendingPathComponent("feed_cache.json")
let jsonData = try JSONSerialization.data(
withJSONObject: response,
options: [.prettyPrinted]
)
try jsonData.write(to: cacheFile)
Objective-C använder NSSearchPathForDirectoriesInDomains med NSCachesDirectory. Även om Apple rekommenderar Swift API, förblir Objective-C-kod med Caches Directory fungerande och supportad.
@import Foundation;
NSArray *paths = NSSearchPathForDirectoriesInDomains(
NSCachesDirectory,
NSUserDomainMask,
YES
);
NSString *cachesPath = paths.firstObject;
NSString *cacheFile = [cachesPath stringByAppendingPathComponent:@"feed_cache.plist"];
Swift-projekt bör föredra URL-baserat API: det är typsäkert och integreras bättre med moderna ramverk som SwiftUI och Combine.
Caches Directory är optimal för flera kategorier av data som appen använder för att påskynda arbetet, men är inte den enda sanningskällan. Rätt val av data för cachning påverkar direkt UX och appens prestanda.
JSON-svar från API, nyhetsflödesdata, objektlistor — allt som appen kan ladda om från servern. Använd URLCache för automatisk cachning av HTTP-svar eller spara serialiserade objekt manuellt.
Bilder laddade från nätverket — det vanligaste användningsfallet för Caches Directory. Bibliotek som SDWebImage och Kingfisher sparar som standard cachade bilder just i Caches.
| Datatyp | Lämplig för Caches | Lagringstid |
|---|---|---|
| JSON API-svar | Ja | Tills systemrensning |
| Bilder från nätverk | Ja | Tills systemrensning |
| Loggar felsökning | Villkorligt | Bättre i tmp |
| Spar spel | Nej | Endast Documents |
| Konfigurationer app | Nej | Application Support |
Om data inte kan återställas — är deras plats inte i Caches. Detta är det enklaste kriteriet: föreställ dig att systemet imorgon tar bort alla filer från Caches. Om appen fortsätter att fungera korrekt — lagras data korrekt.
iOS hanterar automatiskt rensning av Caches Directory, men exakta triggers och algoritmer dokumenteras inte av Apple. Det är känt att systemet kan ta bort filer från Caches vid brist på diskutrymme, samt vid funktionen Offload Unused Apps.
Rensningsprocessen är transparent för appen: systemet tar bort filer utan meddelande. Appen måste kontrollera filens existens före läsning och skapa den på nytt om den saknas. Att inte förlita sig på långtidslagring — är ett nyckelkrav vid arbete med Caches.
Enligt Apples artikel "File System Basics" (2024) bör appen inte räkna med att filer i Caches Directory kommer att vara tillgängliga mellan sessioner. Utvecklare rekommenderas att implementera en fallback-mekanism: när cachefilen saknas — ladda data från nätverket och spara igen i Caches.
Ett separat scenario — avladdning av appen (Offload). Vid aktivering av denna funktion tar iOS bort appen men behåller dess Documents Directory. Caches Directory tas bort i processen. En användare som återställt appen får inte cachad data — appen måste ladda den på nytt.
Skillnaden mellan Caches och Temporary (tmp) orsakar ofta förvirring bland utvecklare. Båda katalogerna lagrar temporär data, men med olika garantier för livslängd och syfte.
| Egenskap | Caches Directory | Temporary Directory |
|---|---|---|
| Livslängd | Från session till session (ej garanterad) | Endast inom sessionen |
| Systemrensning | Vid utrymmesbrist | Vid sessionsslut eller omstart |
| Syfte | Cache för snabbare funktion | Mycket temporär data |
| Exempel | Cachade bilder | Temporär fil före export |
| Säkerhetskopia | Nej | Nej |
Välj Caches om data är användbar att spara mellan appstarter, men kan återställas. Använd tmp om data endast behövs i den aktuella sessionen och saknar värde efter att appen avslutats.
Arbete med Caches Directory kräver efterlevnad av flera regler som hjälper till att undvika dataförlust, oväntat appbeteende och prestandaproblem.
FileManager.fileExists(atPath:) bör anropas före varje läsning från Caches. Om filen saknas — ladda data från den ursprungliga källan och spara i cachen. Anta aldrig att en fil från Caches existerar.
Ställ in maximal storlek för Caches Directory i appen. Till exempel en gräns på 50 MB för bilder och 10 MB för JSON-svar. Vid överskridande av gränsen, ta bort de äldsta filerna efter ändringsdatum.
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 }
// Räkna upp och ta bort gamla filer
// när storleksgränsen överskrids
}
Efterlevnad av denna praxis garanterar att appen fungerar korrekt vid alla systemåtgärder för cache-rensning och att användaren inte drabbas av oväntad dataförlust.
Vanliga frågor
Nej, iOS skickar inte meddelanden före borttagning av filer från Caches. Rensningsprocessen är helt transparent för appen. Det enda sättet att få reda på borttagning — vid försök att läsa filen returnerar FileManager nil eller kastar ett fel, och appen måste hantera denna situation.
Direkt åtkomst till Caches Directory via Files eller iTunes har användaren inte. Användaren kan dock rensa cache för alla appar via Inställningar > Allmänt > Lagring, genom att välja en specifik app och trycka på "Avladda app". iOS kan också automatiskt rensa cache vid utrymmesbrist.
URLCache — är en inbyggd mekanism för cachning av HTTP-förfrågningar från Foundation. Den sparar och laddar automatiskt cachade svar, med Caches Directory i bakgrunden. Manuell lagring ger mer kontroll: man kan välja format, kryptera data och hantera livslängden för varje fil individuellt.
Vid uppdatering av appen via App Store behålls Caches Directory. Innehållet kan dock tas bort av systemet om den nya uppdateringen kräver mer utrymme för installation. Utvecklaren bör inte förlita sig på att Caches bevaras efter uppdatering — detta är en extra anledning att implementera en fallback-mekanism.
Sätt URLCache till nil för en specifik NSURLSession-session eller använd cachningspolicyn .reloadIgnoringLocalCacheData. Man kan också skapa en URLSessionConfiguration-konfiguration med tom cache: sessionConfiguration.urlCache = nil. Detta är användbart för data som alltid måste vara aktuell.
Sammanfattning
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.
Läs också