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: он је типски безбедан и боље се интегрише са модерним фрејмворцима попут 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 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. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође