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 }

// Save cached 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-based API: оно типобезопасно и лучше интегрируется с современными фреймворками, такими как 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 vs Temporary Directory

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

ХарактеристикаCaches DirectoryTemporary Directory
Время жизниОт сессии до сессии (не гарантировано)Только в рамках сессии
Очистка системойПри нехватке местаПри завершении сессии или перезагрузке
НазначениеКэш для ускорения работыОчень временные данные
ПримерЗакэшированные изображенияВременный файл перед экспортом
БэкапНетНет

Выбирай Caches, если данные полезно сохранить между запусками приложения, но их можно восстановить. Используй tmp, если данные нужны только в рамках текущей сессии и не имеют ценности после завершения приложения.

Лучшие практики работы с Caches

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

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

FileManager.fileExists(atPath:) должен вызываться перед каждым чтением из Caches. Если файл отсутствует — загрузи данные из первоисточника и сохрани в кэш. Никогда не предполагай, что файл из Caches существует.

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

Устанавливай максимальный размер Caches Directory в приложении. Например, лимит в 50 МБ для изображений и 10 МБ для 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 }

    // Enumerate and remove old files
    // when exceeding size limit
}

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

Часто задаваемые вопросы

Система уведомляет приложение перед очисткой 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 года. Мы проконсультируем вас и предложим наилучшее решение.

Обсудить проект

Читайте также