Caches Directory: какво е, управление на кеша и изчистване на данни

Автор: IT Sectr Публикувано: 2026-07-10 Време за четене: 10 мин

Caches Directory — е директория в пясъчника на iOS приложение, предназначена за съхранение на временни данни, които могат да бъдат възстановени или презаредени от мрежата. Според Apple File System Basics (2024), системата може по всяко време да изтрива файлове от Caches Directory, за да освободи място на диска — приложението трябва правилно да обработва липсата на тези файлове и при необходимост да ги възстановява. За разлика от Documents Directory, данните от Caches не се включват в резервните копия на iCloud и iTunes, което намалява натоварването на облачното хранилище на потребителя.

Основни точки

  • Caches Directory — временно хранилище за данни, които могат да бъдат възстановени от мрежата или пресъздадени.
  • iOS системата може по всяко време да изтрие файлове от Caches при недостатъчно място на устройството.
  • Данните от Caches не се включват в резервните копия на iCloud и iTunes.
  • Пътят до директорията се получава чрез NSCachesDirectory или FileManager.urls(for: .cachesDirectory).
  • Основната разлика от Documents: Caches не е предназначена за потребителски данни, чиято загуба е критична.

Какво е Caches Directory в iOS?

Caches Directory — е директория вътре в пясъчника на iOS приложение, оптимизирана за съхранение на данни, които могат да бъдат възстановени при необходимост. За разлика от Documents Directory, Caches не е предназначена за потребителски данни — това е временно хранилище за ускоряване на работата на приложението.

iOS използва Caches Directory за поставяне на кеширани мрежови отговори, предварително заредени изображения, сериализирани обекти и данни, които приложението може да възстанови. Разработчикът не трябва да разчита на дългосрочно съхранение на данни в тази директория.

Според данни от Apple WWDC 2020, около 40% от iOS приложенията използват Caches Directory за съхранение на кеширани изображения и мрежови данни, докато 25% от разработчиците неправилно поставят в Caches данни, които трябва да бъдат в Documents или Application Support, поради неразбиране на разликите между тези директории.

Критично свойство на Caches: приложението трябва правилно да обработва ситуацията, когато кеш файлът е изтрит от системата. Ако след изтриване на кеша функционалността на приложението се наруши — това означава, че данните се съхраняват в грешна директория.

Как да получите пътя до Caches Directory

В Swift пътят до Caches Directory се получава чрез стандартния метод на FileManager с посочване на .cachesDirectory. Това е проста операция, използвана в почти всяко iOS приложение, работещо с мрежови данни.

swift
import Foundation

let fileManager = FileManager.default
guard let cachesURL = fileManager.urls(
    for: .cachesDirectory,
    in: .userDomainMask
).first else { return }

// Запазване на кеширан JSON
let cacheFile = cachesURL.appendingPathComponent("feed_cache.json")
let jsonData = try JSONSerialization.data(
    withJSONObject: response,
    options: [.prettyPrinted]
)
try jsonData.write(to: cacheFile)

Objective-C използва NSSearchPathForDirectoriesInDomains с NSCachesDirectory. Въпреки че Apple препоръчва Swift API, кодът на Objective-C с Caches Directory остава работещ и поддържан.

objective-c
@import Foundation;

NSArray *paths = NSSearchPathForDirectoriesInDomains(
    NSCachesDirectory,
    NSUserDomainMask,
    YES
);
NSString *cachesPath = paths.firstObject;
NSString *cacheFile = [cachesPath stringByAppendingPathComponent:@"feed_cache.plist"];

Swift проектите трябва да предпочитат URL-базирано API: то е типобезопасно и се интегрира по-добре с модерни frameworks като SwiftUI и Combine.

Какви данни да съхранявате в Caches

Caches Directory е оптимална за няколко категории данни, които приложението използва за ускоряване на работата, но не е единственият източник на истина. Правилният избор на данни за кеширане пряко влияе върху UX и производителността на приложението.

Кеширани мрежови отговори

JSON отговори от API, данни от новинарски емисии, списъци с обекти — всичко, което приложението може да презареди от сървъра. Използвайте URLCache за автоматично кеширане на HTTP отговори или ръчно запазвайте сериализирани обекти.

Изображения и медийни файлове

Изображения, заредени от мрежата — най-честият случай на използване на Caches Directory. Библиотеки като SDWebImage и Kingfisher по подразбиране запазват кеширани изображения точно в Caches.

Тип данниПодходящ за CachesСрок на съхранение
JSON API отговориДаДо изчистване от системата
Изображения от мрежаДаДо изчистване от системата
Логове за отстраняване на грешкиУсловноПо-добре в tmp
Запазвания на игриНеСамо Documents
Конфигурации на приложениеНеApplication Support

Ако данните не могат да бъдат възстановени — мястото им не е в Caches. Това е най-простият критерий: представете си, че утре системата изтрива всички файлове от Caches. Ако приложението продължи да работи правилно — данните се съхраняват правилно.

Как системата управлява изчистването на кеша

iOS автоматично управлява изчистването на Caches Directory, но точните тригери и алгоритми не са документирани от Apple. Известно е, че системата може да изтрива файлове от Caches при недостатъчно място на диска, както и при работа на функцията Offload Unused Apps.

Процесът на изчистване е прозрачен за приложението: системата изтрива файлове без уведомление. Приложението трябва да проверява наличието на файла преди четене и да го създава отново при липса. Неразчитането на дългосрочно съхранение — е ключово изискване при работа с Caches.

Според статията на Apple "File System Basics" (2024), приложението не трябва да разчита, че файловете в Caches Directory ще бъдат налични между сесиите. На разработчиците се препоръчва да реализират fallback механизъм: при липса на кеширан файл — заредете данните от мрежата и ги запазете отново в Caches.

Отделен сценарий — разтоварване на приложението (Offload). При активиране на тази функция iOS изтрива приложението, но запазва неговата Documents Directory. Caches Directory се изтрива в този процес. Потребителят, възстановил приложението, няма да получи кеширани данни — приложението трябва да ги зареди отново.

Caches Directory срещу Temporary Directory

Разликата между Caches и Temporary (tmp) често предизвиква объркване сред разработчиците. И двете директории съхраняват временни данни, но с различни гаранции за живот и предназначение.

ХарактеристикаCaches DirectoryTemporary Directory
ЖивотОт сесия до сесия (не е гарантиран)Само в рамките на сесия
Изчистване от систематаПри недостиг на мястоПри приключване на сесия или рестарт
ПредназначениеКеш за ускоряванеМного временни данни
ПримерКеширани изображенияВременен файл преди експорт
Резервно копиеНеНе

Изберете Caches, ако данните са полезни за запазване между стартиранията на приложението, но могат да бъдат възстановени. Използвайте tmp, ако данните са необходими само в текущата сесия и нямат стойност след приключване на приложението.

Най-добри практики за работа с Caches

Работата с Caches Directory изисква спазване на няколко правила, които помагат да се избегне загуба на данни, неочаквано поведение на приложението и проблеми с производителността.

Винаги проверявайте наличието на файла преди четене

FileManager.fileExists(atPath:) трябва да се извиква преди всяко четене от Caches. Ако файлът липсва — заредете данните от оригиналния източник и ги запазете в кеша. Никога не предполагайте, че файл от Caches съществува.

Ограничавайте размера на кеша

Задайте максимален размер на Caches Directory в приложението. Например лимит от 50 MB за изображения и 10 MB за JSON отговори. При превишаване на лимита изтрийте най-старите файлове по дата на промяна.

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

    // Изброяване и изтриване на стари файлове
    // при превишаване на лимита на размера
}

Спазването на тези практики гарантира, че приложението работи правилно при всички действия на системата за изчистване на кеша и потребителят не се сблъсква с неочаквана загуба на данни.

Често задавани въпроси

Уведомява ли системата приложението преди изчистване на Caches Directory?

Не, iOS не изпраща уведомления преди изтриване на файлове от Caches. Процесът на изчистване е напълно прозрачен за приложението. Единственият начин да разберете за изтриване — при опит за четене на файла FileManager връща nil или хвърля грешка, и приложението трябва да обработи тази ситуация.

Може ли потребителят ръчно да изчисти Caches Directory?

Пряк достъп до Caches Directory чрез Files или iTunes потребителят няма. Потребителят обаче може да изчисти кеша на всички приложения чрез Настройки > Основни > Хранилище, като избере конкретно приложение и натисне "Разтоварване на приложението". iOS може също автоматично да изчиства кеша при недостиг на място.

Как се различава URLCache от ръчното запазване в Caches Directory?

URLCache — е вграден механизъм за кеширане на HTTP заявки от Foundation. Той автоматично запазва и зарежда кеширани отговори, използвайки Caches Directory на заден план. Ръчното запазване дава повече контрол: можете да изберете формат, да криптирате данни и да управлявате живота на всеки файл индивидуално.

Какво се случва с Caches Directory при актуализация на приложението?

При актуализация на приложението чрез App Store, Caches Directory се запазва. Съдържанието обаче може да бъде изтрито от системата, ако новата актуализация изисква повече място за инсталиране. Разработчикът не трябва да разчита на запазване на Caches след актуализация — това е допълнителна причина за реализиране на fallback механизъм.

Как да изключите автоматичното кеширане за NSURLSession?

Задайте URLCache на nil за конкретна NSURLSession сесия или използвайте политика за кеширане .reloadIgnoringLocalCacheData. Можете също да създадете конфигурация URLSessionConfiguration с празен кеш: sessionConfiguration.urlCache = nil. Това е полезно за данни, които винаги трябва да са актуални.

Резюме

  • Caches Directory — временно хранилище за данни, които могат да бъдат възстановени от мрежата или пресъздадени.
  • iOS системата може по всяко време да изтрие файлове от Caches без уведомление на приложението.
  • Данните от Caches не се включват в резервните копия на iCloud и iTunes, което спестява място.
  • Пътят до директорията — FileManager.urls(for: .cachesDirectory) в Swift или NSSearchPathForDirectoriesInDomains в Objective-C.
  • В Caches се съхраняват кеширани изображения, JSON API отговори и други възстановими данни.
  • За разлика от tmp, Caches може да запази данни между стартирания, но без гаранция.
  • Винаги проверявайте наличието на файла преди четене от Caches и реализирайте fallback зареждане.

Ще разработим мобилно приложение под ключ

IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.

Обсъдете проекта

Прочетете също