Caches Directory — egy könyvtár az iOS alkalmazás homokozójában, amely ideiglenes adatok tárolására szolgál, amelyek visszaállíthatók vagy újratölthetők a hálózatból. Az Apple File System Basics (2024) szerint a rendszer bármikor törölheti a fájlokat a Caches Directory-ból a lemezterület felszabadítása érdekében — az alkalmazásnak megfelelően kell kezelnie e fájlok hiányát, és szükség esetén vissza kell állítania azokat. A Documents Directory-val ellentétben a Caches adatai nem kerülnek be az iCloud és iTunes biztonsági mentésbe, ami csökkenti a felhasználó felhőtárhelyének terhelését.
Főbb pontok
Caches Directory — egy könyvtár az iOS alkalmazás homokozójában, optimalizálva olyan adatok tárolására, amelyek szükség esetén visszaállíthatók. A Documents Directory-val ellentétben a Caches nem felhasználói adatokra szolgál — ez egy ideiglenes tároló az alkalmazás működésének gyorsítására.
Az iOS a Caches Directory-t használja gyorsítótárazott hálózati válaszok, előre betöltött képek, szerializált objektumok és olyan adatok elhelyezésére, amelyeket az alkalmazás visszaállíthat. A fejlesztő nem támaszkodhat az adatok hosszú távú tárolására ebben a könyvtárban.
Az Apple WWDC 2020 adatai szerint az iOS alkalmazások körülbelül 40%-a használja a Caches Directory-t gyorsítótárazott képek és hálózati adatok tárolására, míg a fejlesztők 25%-a helytelenül helyezi el a Caches-ben azokat az adatokat, amelyeknek a Documents vagy Application Support könyvtárban kellene lenniük, mert nem értik a könyvtárak közötti különbségeket.
A Caches kritikus tulajdonsága: az alkalmazásnak megfelelően kell kezelnie azt a helyzetet, amikor a gyorsítótár-fájlt a rendszer törölte. Ha a gyorsítótár törlése után az alkalmazás funkciói megsérülnek — az azt jelenti, hogy az adatok rossz könyvtárban vannak tárolva.
Swift-ben a Caches Directory elérési útja a FileManager szabványos metódusával kapható meg a .cachesDirectory megadásával. Ez egy egyszerű művelet, amelyet gyakorlatilag minden hálózati adatokkal dolgozó iOS alkalmazás használ.
import Foundation
let fileManager = FileManager.default
guard let cachesURL = fileManager.urls(
for: .cachesDirectory,
in: .userDomainMask
).first else { return }
// Gyorsítótárazott JSON mentése
let cacheFile = cachesURL.appendingPathComponent("feed_cache.json")
let jsonData = try JSONSerialization.data(
withJSONObject: response,
options: [.prettyPrinted]
)
try jsonData.write(to: cacheFile)
Az Objective-C a NSSearchPathForDirectoriesInDomains-t használja NSCachesDirectory-val. Bár az Apple a Swift API-t ajánlja, az Objective-C kód a Caches Directory-val továbbra is működőképes és támogatott.
@import Foundation;
NSArray *paths = NSSearchPathForDirectoriesInDomains(
NSCachesDirectory,
NSUserDomainMask,
YES
);
NSString *cachesPath = paths.firstObject;
NSString *cacheFile = [cachesPath stringByAppendingPathComponent:@"feed_cache.plist"];
A Swift projekteknek az URL-alapú API-t kell előnyben részesíteniük: ez típusbiztos és jobban integrálható olyan modern keretrendszerekkel, mint a SwiftUI és a Combine.
Caches Directory optimális több olyan adatkategória számára, amelyeket az alkalmazás a működés gyorsítására használ, de nem ez az egyetlen igazságforrás. A gyorsítótárazandó adatok helyes kiválasztása közvetlenül befolyásolja az alkalmazás UX-ét és teljesítményét.
JSON-válaszok API-tól, hírcsatorna-adatok, objektumlisták — minden, amit az alkalmazás újra tud tölteni a szerverről. Használja az URLCache-t a HTTP-válaszok automatikus gyorsítótárazásához, vagy manuálisan mentse a szerializált objektumokat.
Képek letöltve a hálózatból — a Caches Directory leggyakoribb használati esete. Az olyan könyvtárak, mint az SDWebImage és a Kingfisher, alapértelmezés szerint pontosan a Caches-ben tárolják a gyorsítótárazott képeket.
| Adattípus | Alkalmas a Caches-hez | Megőrzési idő |
|---|---|---|
| JSON API-válaszok | Igen | A rendszer törléséig |
| Képek a hálózatból | Igen | A rendszer törléséig |
| Naplók hibakereséshez | Feltételes | Jobb a tmp-ben |
| Játék mentések | Nem | Csak Documents |
| Konfigurációk alkalmazáshoz | Nem | Application Support |
Ha az adatok nem állíthatók vissza — a helyük nem a Caches-ben van. Ez a legegyszerűbb kritérium: képzelje el, hogy holnap a rendszer törli az összes fájlt a Caches-ből. Ha az alkalmazás továbbra is megfelelően működik — az adatok helyesen vannak tárolva.
Az iOS automatikusan kezeli a Caches Directory törlését, de a pontos triggerek és algoritmusok nincsenek dokumentálva az Apple által. Ismert, hogy a rendszer törölhet fájlokat a Caches-ből, ha nincs elegendő lemezterület, valamint az Offload Unused Apps funkció működése során.
A törlési folyamat átlátható az alkalmazás számára: a rendszer értesítés nélkül törli a fájlokat. Az alkalmazásnak ellenőriznie kell a fájl meglétét olvasás előtt, és hiány esetén újra létre kell hoznia. A hosszú távú tárolásra való támaszkodás elkerülése — kulcsfontosságú követelmény a Caches használatakor.
Az Apple "File System Basics" (2024) cikke szerint az alkalmazás nem számíthat arra, hogy a Caches Directory-ban lévő fájlok elérhetőek lesznek a munkamenetek között. A fejlesztőknek ajánlott fallback mechanizmust implementálniuk: ha a gyorsítótárazott fájl hiányzik — töltse le az adatokat a hálózatból, és mentse el újra a Caches-be.
Külön forgatókönyv — az alkalmazás kiürítése (Offload). E funkció aktiválásakor az iOS törli az alkalmazást, de megtartja annak Documents Directory-ját. A Caches Directory ezzel együtt törlődik. Az a felhasználó, aki visszaállította az alkalmazást, nem kapja meg a gyorsítótárazott adatokat — az alkalmazásnak újra le kell töltenie azokat.
A Caches és a Temporary (tmp) közötti különbség gyakran zavart okoz a fejlesztők körében. Mindkét könyvtár ideiglenes adatokat tárol, de eltérő élettartam-garanciákkal és célokkal.
| Jellemző | Caches Directory | Temporary Directory |
|---|---|---|
| Élettartam | Munkamenettől munkamenetig (nem garantált) | Csak a munkameneten belül |
| Rendszer törlés | Helyhiány esetén | A munkamenet végén vagy újraindításkor |
| Cél | Gyorsítótár a sebességhez | Nagyon ideiglenes adatok |
| Példa | Gyorsítótárazott képek | Ideiglenes fájl exportálás előtt |
| Biztonsági mentés | Nem | Nem |
Válassza a Caches-t, ha az adatok hasznosak az alkalmazás indítások között, de visszaállíthatók. Használja a tmp-t, ha az adatok csak az aktuális munkamenetben szükségesek, és nincs értékük az alkalmazás befejezése után.
A Caches Directory-val való munka néhány szabály betartását igényli, amelyek segítenek elkerülni az adatvesztést, az alkalmazás váratlan viselkedését és a teljesítményproblémákat.
A FileManager.fileExists(atPath:)-t minden Caches-ből történő olvasás előtt meg kell hívni. Ha a fájl hiányzik — töltse le az adatokat az eredeti forrásból, és mentse el a gyorsítótárba. Soha ne feltételezze, hogy a Caches-ből származó fájl létezik.
Állítsa be a Caches Directory maximális méretét az alkalmazásban. Például 50 MB-os korlát a képekhez és 10 MB a JSON-válaszokhoz. A korlát túllépésekor törölje a legrégebbi fájlokat a módosítás dátuma szerint.
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égi fájlok felsorolása és törlése
// méretkorlát túllépésekor
}
E gyakorlatok betartása garantálja, hogy az alkalmazás megfelelően működik a rendszer gyorsítótár-törlési műveletei során, és a felhasználó nem találkozik váratlan adatvesztéssel.
Gyakran Ismételt Kérdések
Nem, az iOS nem küld értesítéseket a fájlok Caches-ből való törlése előtt. A törlési folyamat teljesen átlátható az alkalmazás számára. Az egyetlen módja a törlés megtudásának — a fájl olvasásakor a FileManager nil-t ad vissza vagy hibát dob, és az alkalmazásnak kezelnie kell ezt a helyzetet.
Közvetlen hozzáférése a Caches Directory-hoz Files-on vagy iTunes-on keresztül a felhasználónak nincs. A felhasználó azonban törölheti az összes alkalmazás gyorsítótárát a Beállítások > Általános > Tárhely menüpontban, kiválasztva egy adott alkalmazást és megnyomva az "Alkalmazás kiürítése" gombot. Az iOS automatikusan is törölheti a gyorsítótárat helyhiány esetén.
Az URLCache — egy beépített mechanizmus a HTTP-kérések gyorsítótárazására a Foundation-ből. Automatikusan menti és betölti a gyorsítótárazott válaszokat, a háttérben a Caches Directory-t használva. A manuális mentés nagyobb kontrollt biztosít: kiválaszthatja a formátumot, titkosíthatja az adatokat, és egyedileg kezelheti az egyes fájlok élettartamát.
Az alkalmazás App Store-on keresztüli frissítésekor a Caches Directory megmarad. A tartalmat azonban a rendszer törölheti, ha az új frissítés több helyet igényel a telepítéshez. A fejlesztő nem támaszkodhat a Caches megmaradására frissítés után — ez egy további ok a fallback mechanizmus implementálására.
Állítsa az URLCache-t nil-re egy adott NSURLSession-munkamenethez, vagy használja a .reloadIgnoringLocalCacheData gyorsítótárazási házirendet. Létrehozhat egy URLSessionConfiguration konfigurációt is üres gyorsítótárral: sessionConfiguration.urlCache = nil. Ez hasznos azokhoz az adatokhoz, amelyeknek mindig naprakésznek kell lenniük.
Összefoglalás
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is