Caches Directory: co to jest, zarządzanie pamięcią podręczną i czyszczenie danych

Autor: IT Sectr Opublikowano: 2026-07-10 Czas czytania: 10 min

Caches Directory — to katalog w piaskownicy aplikacji iOS, przeznaczony do przechowywania tymczasowych danych, które można przywrócić lub ponownie pobrać z sieci. Według Apple File System Basics (2024), system może w każdej chwili usuwać pliki z Caches Directory, aby zwolnić miejsce na dysku — aplikacja musi poprawnie obsługiwać brak tych plików i w razie potrzeby przywracać je. W przeciwieństwie do Documents Directory, dane z Caches nie są uwzględniane w kopii zapasowej iCloud i iTunes, co zmniejsza obciążenie magazynu w chmurze użytkownika.

Najważniejsze

  • Caches Directory — tymczasowe przechowywanie danych, które można przywrócić z sieci lub odtworzyć.
  • System iOS może w każdej chwili usunąć pliki z Caches przy braku miejsca na urządzeniu.
  • Dane z Caches nie są uwzględniane w kopii zapasowej iCloud i iTunes.
  • Ścieżka do katalogu jest uzyskiwana przez NSCachesDirectory lub FileManager.urls(for: .cachesDirectory).
  • Główna różnica od Documents: Caches nie jest przeznaczony dla danych użytkownika, których utrata jest krytyczna.

Co to jest Caches Directory w iOS?

Caches Directory — to katalog wewnątrz piaskownicy aplikacji iOS, zoptymalizowany pod kątem przechowywania danych, które można w razie potrzeby przywrócić. W przeciwieństwie do Documents Directory, Caches nie jest przeznaczony dla danych użytkownika — to tymczasowe przechowywanie w celu przyspieszenia działania aplikacji.

iOS używa Caches Directory do umieszczania zbuforowanych odpowiedzi sieciowych, wstępnie załadowanych obrazów, serializowanych obiektów i danych, które aplikacja może przywrócić. Deweloper nie powinien polegać na długoterminowym przechowywaniu danych w tym katalogu.

Według danych Apple WWDC 2020, około 40% aplikacji iOS używa Caches Directory do przechowywania buforowanych obrazów i danych sieciowych, przy czym 25% deweloperów nieprawidłowo umieszcza w Caches dane, które powinny znajdować się w Documents lub Application Support, z powodu niezrozumienia różnic między tymi katalogami.

Krytyczna właściwość Caches: aplikacja musi poprawnie obsługiwać sytuację, gdy plik z pamięci podręcznej został usunięty przez system. Jeśli po usunięciu pamięci podręcznej funkcjonalność aplikacji jest zaburzona — oznacza to, że dane są przechowywane w niewłaściwym katalogu.

Jak uzyskać ścieżkę do Caches Directory

W Swift ścieżka do Caches Directory jest uzyskiwana standardową metodą FileManager z wskazaniem .cachesDirectory. To prosta czynność, używana praktycznie w każdej aplikacji iOS pracującej z danymi sieciowymi.

swift
import Foundation

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

// Zapisz buforowany JSON
let cacheFile = cachesURL.appendingPathComponent("feed_cache.json")
let jsonData = try JSONSerialization.data(
    withJSONObject: response,
    options: [.prettyPrinted]
)
try jsonData.write(to: cacheFile)

Objective-C używa NSSearchPathForDirectoriesInDomains z NSCachesDirectory. Pomimo że Apple zaleca Swift API, kod Objective-C z Caches Directory pozostaje działający i wspierany.

objective-c
@import Foundation;

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

Projekty Swift powinny preferować URL-based API: jest bezpieczne typowo i lepiej integruje się z nowoczesnymi frameworkami takimi jak SwiftUI i Combine.

Jakie dane przechowywać w Caches

Caches Directory jest optymalny dla kilku kategorii danych, które aplikacja wykorzystuje do przyspieszenia działania, ale nie jest jedynym źródłem prawdy. Prawidłowy wybór danych do buforowania bezpośrednio wpływa na UX i wydajność aplikacji.

Zbuforowane odpowiedzi sieciowe

Odpowiedzi JSON z API, dane kanałów informacyjnych, listy obiektów — wszystko, co aplikacja może ponownie pobrać z serwera. Użyj URLCache do automatycznego buforowania odpowiedzi HTTP lub zapisuj ręcznie serializowane obiekty.

Obrazy i pliki multimedialne

Obrazy pobrane z sieci — najczęstszy przypadek użycia Caches Directory. Biblioteki takie jak SDWebImage i Kingfisher domyślnie zapisują buforowane obrazy właśnie w Caches.

Typ danychOdpowiedni dla CachesCzas przechowywania
JSON odpowiedzi APITakDo czyszczenia systemu
Obrazy z sieciTakDo czyszczenia systemu
Logi debugowaniaWarunkowoLepiej w tmp
Zapisy gierNieTylko Documents
Konfiguracje aplikacjiNieApplication Support

Jeśli dane nie mogą być przywrócone — ich miejsce nie jest w Caches. To najprostsze kryterium: wyobraź sobie, że jutro system usunie wszystkie pliki z Caches. Jeśli aplikacja będzie nadal działać poprawnie — dane są przechowywane prawidłowo.

Jak system zarządza czyszczeniem pamięci podręcznej

iOS automatycznie zarządza czyszczeniem Caches Directory, ale dokładne wyzwalacze i algorytmy nie są udokumentowane przez Apple. Wiadomo, że system może usuwać pliki z Caches przy braku miejsca na dysku, a także podczas działania funkcji Offload Unused Apps.

Proces czyszczenia jest przezroczysty dla aplikacji: system usuwa pliki bez powiadomienia. Aplikacja musi sprawdzać obecność pliku przed odczytem i tworzyć go ponownie w przypadku braku. Niejednokrotne poleganie na długoterminowym przechowywaniu to kluczowy wymóg podczas pracy z Caches.

Według artykułu Apple "File System Basics" (2024), aplikacja nie powinna liczyć na to, że pliki w Caches Directory będą dostępne między sesjami. Deweloperom zaleca się zaimplementowanie mechanizmu fallback: w przypadku braku buforowanego pliku — pobierz dane z sieci i zapisz w Caches ponownie.

Osobny scenariusz — wyładowanie aplikacji (Offload). Przy aktywacji tej funkcji iOS usuwa aplikację, ale zachowuje jej Documents Directory. Caches Directory przy tym jest usuwany. Użytkownik, który przywrócił aplikację, nie otrzyma buforowanych danych — aplikacja musi je pobrać ponownie.

Caches Directory vs Temporary Directory

Różnica między Caches a Temporary (tmp) często powoduje zamieszanie wśród deweloperów. Oba katalogi przechowują tymczasowe dane, ale z różnymi gwarancjami czasu życia i przeznaczeniem.

CechaCaches DirectoryTemporary Directory
Czas życiaOd sesji do sesji (nie gwarantowany)Tylko w ramach sesji
Czyszczenie przez systemPrzy braku miejscaPo zakończeniu sesji lub ponownym uruchomieniu
PrzeznaczeniePamięć podręczna dla przyspieszeniaBardzo tymczasowe dane
PrzykładBuforowane obrazyTymczasowy plik przed eksportem
Kopia zapasowaNieNie

Wybierz Caches, jeśli dane są przydatne do zachowania między uruchomieniami aplikacji, ale można je przywrócić. Użyj tmp, jeśli dane są potrzebne tylko w bieżącej sesji i nie mają wartości po zakończeniu aplikacji.

Najlepsze praktyki pracy z Caches

Praca z Caches Directory wymaga przestrzegania kilku zasad, które pomagają uniknąć utraty danych, nieoczekiwanego zachowania aplikacji i problemów z wydajnością.

Zawsze sprawdzaj obecność pliku przed odczytem

FileManager.fileExists(atPath:) powinien być wywoływany przed każdym odczytem z Caches. Jeśli plik nie istnieje — pobierz dane z oryginalnego źródła i zapisz w pamięci podręcznej. Nigdy nie zakładaj, że plik z Caches istnieje.

Ograniczaj rozmiar pamięci podręcznej

Ustaw maksymalny rozmiar Caches Directory w aplikacji. Na przykład limit 50 MB dla obrazów i 10 MB dla odpowiedzi JSON. Po przekroczeniu limitu usuwaj najstarsze pliki według daty modyfikacji.

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 }

    // Wylicz i usuń stare pliki
    // po przekroczeniu limitu rozmiaru
}

Przestrzeganie tych praktyk gwarantuje, że aplikacja działa poprawnie przy wszystkich działaniach systemu związanych z czyszczeniem pamięci podręcznej, a użytkownik nie spotyka się z nieoczekiwaną utratą danych.

Często zadawane pytania

Czy system powiadamia aplikację przed wyczyszczeniem Caches Directory?

Nie, iOS nie wysyła powiadomień przed usunięciem plików z Caches. Proces czyszczenia jest całkowicie przezroczysty dla aplikacji. Jedynym sposobem, aby dowiedzieć się o usunięciu, jest próba odczytu pliku — FileManager zwróci nil lub zgłosi błąd, a aplikacja musi obsłużyć tę sytuację.

Czy użytkownik może ręcznie wyczyścić Caches Directory?

Bezpośredniego dostępu do Caches Directory przez Files lub iTunes użytkownik nie ma. Jednak użytkownik może wyczyścić pamięć podręczną wszystkich aplikacji przez Ustawienia > Ogólne > Pamięć, wybierając konkretną aplikację i naciskając "Wyładuj aplikację". iOS może również automatycznie czyścić pamięć podręczną przy braku miejsca.

Czym różni się URLCache od ręcznego zapisywania w Caches Directory?

URLCache — to wbudowany mechanizm buforowania żądań HTTP z Foundation. Automatycznie zapisuje i ładuje buforowane odpowiedzi, używając Caches Directory pod spodem. Ręczne zapisywanie daje więcej kontroli: można wybrać format, szyfrować dane i zarządzać czasem życia każdego pliku indywidualnie.

Co stanie się z Caches Directory podczas aktualizacji aplikacji?

Podczas aktualizacji aplikacji przez App Store Caches Directory jest zachowywany. Jednak zawartość może zostać usunięta przez system, jeśli nowa aktualizacja wymaga więcej miejsca do instalacji. Deweloper nie powinien polegać na zachowaniu Caches po aktualizacji — to dodatkowy powód do wdrożenia mechanizmu fallback.

Jak wyłączyć automatyczne buforowanie dla NSURLSession?

Ustaw URLCache na nil dla konkretnej sesji NSURLSession lub użyj polityki buforowania .reloadIgnoringLocalCacheData. Można również utworzyć konfigurację URLSessionConfiguration z pustą pamięcią podręczną: sessionConfiguration.urlCache = nil. Jest to przydatne dla danych, które zawsze muszą być aktualne.

Podsumowanie

  • Caches Directory — tymczasowe przechowywanie danych, które można przywrócić z sieci lub odtworzyć.
  • System iOS może w każdej chwili usunąć pliki z Caches bez powiadamiania aplikacji.
  • Dane z Caches nie są uwzględniane w kopiach zapasowych iCloud i iTunes, co oszczędza miejsce.
  • Ścieżka do katalogu — FileManager.urls(for: .cachesDirectory) w Swift lub NSSearchPathForDirectoriesInDomains w Objective-C.
  • W Caches przechowuje się buforowane obrazy, odpowiedzi JSON API i inne dane do przywrócenia.
  • W przeciwieństwie do tmp, Caches może zachowywać dane między uruchomieniami, ale bez gwarancji.
  • Zawsze sprawdzaj obecność pliku przed odczytem z Caches i implementuj ładowanie fallback.

Opracujemy aplikację mobilną pod klucz

IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.

Omów projekt

Przeczytaj również