Disk Cache: co to jest, pamięć podręczna dysku iOS i zasady działania

Autor: IT Sectr Opublikowano: 2026-07-11 Czas czytania: 7 min

Disk Cache — to mechanizm tymczasowego przechowywania danych na dysku urządzenia, umożliwiający aplikacjom iOS przyspieszenie ponownego dostępu do wcześniej załadowanych zasobów. Według Apple Developer Documentation, 2024, Disk Cache zmniejsza wykorzystanie sieci, obniża obciążenie baterii i zapewnia działanie aplikacji w trybie offline. iOS udostępnia kilka wbudowanych mechanizmów buforowania: URLCache dla zapytań sieciowych, NSCache dla pamięci operacyjnej oraz niestandardowe implementacje poprzez katalog Caches.

Najważniejsze

  • Disk Cache — przechowywanie danych na dysku w celu przyspieszenia ponownego dostępu i zmniejszenia ruchu sieciowego
  • URLCache — wbudowany mechanizm buforowania zapytań HTTP w iOS
  • Caches directory — specjalny katalog Sandbox dla tymczasowych danych aplikacji
  • Unieważnianie pamięci podręcznej jest krytyczne dla aktualności danych — strategie czasowe, zdarzeniowe i wersyjne
  • System może wyczyścić pamięć podręczną przy braku miejsca — cache nie powinien zawierać niezastąpionych danych

Czym jest Disk Cache w iOS?

Disk Cache — to technologia tymczasowego przechowywania danych na stałym nośniku urządzenia (pamięci flash) w celu przyspieszenia kolejnych zapytań do tych samych danych. W przeciwieństwie do pamięci RAM, Disk Cache zachowuje dane po ponownym uruchomieniu aplikacji, a nawet urządzenia.

iOS udostępnia dwa główne poziomy buforowania: operacyjny (NSCache, pamięć) i dyskowy (URLCache, system plików). Buforowanie dyskowe jest 10–100 razy wolniejsze niż operacyjne, ale znacznie szybsze niż zapytanie sieciowe — różnica może wynosić od 2 do 3 rzędów wielkości. Optymalna strategia wykorzystuje dwupoziomową pamięć podręczną: pamięć dla gorących danych i dysk dla zimnych.

Według Apple Performance Optimization Guide, 2023, prawidłowo skonfigurowany Disk Cache skraca czas ładowania treści o 60–80% przy powtórnych przeglądaniach i zmniejsza zużycie transferu o 40–70%. W przypadku aplikacji z treściami multimedialnymi (obrazy, wideo, audio) buforowanie jest krytycznym czynnikiem UX.

URLCache: wbudowany mechanizm buforowania

URLCache — to wbudowana klasa Foundation implementująca połączoną pamięć podręczną dla zapytań URLSession. Automatycznie zapisuje odpowiedzi serwera na dysku i w pamięci, zarządzając rozmiarem cache i politykami unieważniania na podstawie nagłówków HTTP Cache-Control, Expires i ETag.

swift
import Foundation

let cache = URLCache(
    memoryCapacity: 50 * 1024 * 1024,
    diskCapacity: 200 * 1024 * 1024,
    diskPath: "network-cache"
)

URLCache.shared = cache

let config = URLSessionConfiguration.default
config.urlCache = cache
config.requestCachePolicy = .returnCacheDataElseLoad

let session = URLSession(configuration: config)

Polityki buforowania URLCache określają, kiedy używać danych z pamięci podręcznej, a kiedy wykonać nowe zapytanie. Główne polityki: useProtocolCachePolicy (na podstawie nagłówków serwera), reloadIgnoringLocalCacheData (zawsze z serwera), returnCacheDataElseLoad (najpierw cache), returnCacheDataDontLoad (tylko cache — tryb offline).

Cache-Control — nagłówek HTTP, który serwer wysyła wraz z odpowiedzią, wskazując max-age (czas życia w sekundach), must-revalidate (sprawdzanie aktualności), no-cache (nie używaj bez weryfikacji) i no-store (nie buforuj). iOS ściśle przestrzega tych nagłówków automatycznie przy użyciu URLCache z polityką useProtocolCachePolicy.

Niestandardowe strategie buforowania i unieważnianie

Niestandardowa pamięć podręczna jest konieczna, gdy wbudowany URLCache nie wystarcza: do przechowywania przetworzonych obrazów, serializowanych modeli danych lub wyników obliczeń. W takich przypadkach programista tworzy własny system buforowania oparty na katalogu Caches w Sandbox aplikacji.

swift
class DiskCache<T: Codable> {
    private let cacheDir: URL
    private let encoder = JSONEncoder()
    private let decoder = JSONDecoder()

    init() {
        let paths = FileManager.default
            .urls(for: .cachesDirectory,
                     in: .userDomainMask)
        cacheDir = paths[0].appendingPathComponent(
            "data-cache", isDirectory: true
        )
        try? FileManager.default
            .createDirectory(at: cacheDir,
                             withIntermediateDirectories: true)
    }

    func set(value: T, for key: String) {
        let url = cacheDir.appendingPathComponent(
            SHA256.hash(key)
        )
        if let data = try? encoder.encode(value) {
            try? data.write(to: url)
        }
    }

    func get(for key: String) -> T? {
        let url = cacheDir.appendingPathComponent(
            SHA256.hash(key)
        )
        guard let data = try? Data(contentsOf: url) else { return nil }
        return try? decoder.decode(T.self, from: data)
    }

    func clearAll() {
        try? FileManager.default
            .removeItem(at: cacheDir)
    }
}

Strategie unieważniania cache określają, kiedy przechowywane dane są uznawane za nieaktualne: TTL (Time-To-Live) — dane żyją przez ustalony czas po zapisie; event-driven — unieważnienie po wystąpieniu zdarzenia (np. aktualizacja danych na serwerze); version-based — unieważnienie przy zmianie wersji API lub formatu danych; LRU (Least Recently Used) — automatyczne usuwanie najmniej używanych zapisów po przekroczeniu limitu rozmiaru.

Praktyczna zasada: TTL jest odpowiedni dla wiadomości i treści, które starzeją się w przewidywalny sposób. Event-driven — dla danych zarządzanych przez serwer poprzez powiadomienia push. Version-based — dla konfiguracji i modeli danych. LRU — uniwersalny wybór dla plików multimedialnych z ograniczoną przestrzenią dyskową.

Wydajność i ograniczenia pamięci podręcznej

Wydajność Disk Cache mierzy się za pomocą hit ratio — procent zapytań obsłużonych z cache bez odwołania do sieci. Typowy hit ratio dla dobrze skonfigurowanego cache obrazów wynosi 70–90%, dla odpowiedzi API — 40–60%, dla strumieniowego wideo — 30–50%.

Typ danychTypowy hit ratioZalecany rozmiar cache
Obrazy70–90%100–500 MB
Odpowiedzi API JSON40–60%10–50 MB
Wideo/audio30–50%500 MB — 1 GB
Czcionki i zasoby90–99%5–20 MB
Treści web50–70%50–200 MB

Ograniczenia Disk Cache w iOS: system może usunąć zawartość katalogu Caches w dowolnym momencie przy braku miejsca na dysku. To zachowanie nie jest konfigurowalne — iOS sam decyduje, kiedy i które pliki cache usunąć. Dlatego cache nie powinien zawierać danych, których nie można odzyskać z sieci lub innych źródeł.

Wpływ na pamięć flash: częsty zapis do Disk Cache przyspiesza zużycie pamięci flash. iOS używa TRIM i wear leveling w celu minimalizacji zużycia, ale programistom zaleca się unikanie nadmiernego zapisu: nie aktualizować cache częściej niż raz na 5 minut dla tego samego pliku; grupować małe zapisy w jeden; używać NSCache dla danych tymczasowych, które nie wymagają przechowywania na dysku.

Najlepsze praktyki buforowania w iOS

Dwupoziomowa pamięć podręczna — standardowa architektura dla aplikacji iOS: pamięć (NSCache) dla danych, do których często się odwołujemy, i dysk (URLCache lub niestandardowy) dla danych, które powinny być zachowane między sesjami. Czas życia w pamięci — minuty, na dysku — godziny lub dni.

Buforowanie obrazów: używaj wyspecjalizowanych bibliotek (Kingfisher, SDWebImage, Nuke), które implementują dwupoziomową pamięć podręczną z automatycznym unieważnianiem, obsługą pamięci i asynchronicznym zapisem na dysk. Samodzielna implementacja cache obrazów wymaga uwzględnienia dekodowania, przestrzeni kolorów i skalowania.

Cache i bezpieczeństwo: nie buforuj poufnych danych (haseł, tokenów, danych osobowych) na dysku bez szyfrowania. URLCache domyślnie nie szyfruje danych — używaj NSFileProtection lub szyfrowania na poziomie aplikacji dla wrażliwych treści. Dla zapytań sieciowych z autoryzacją używaj polityki .reloadIgnoringLocalCacheData.

Monitorowanie cache: śledź hit ratio, bieżący rozmiar cache i liczbę zapisów na minutę. Jeśli hit ratio spada poniżej 30% — cache jest nieefektywny i wymaga przeglądu strategii lub zwiększenia rozmiaru. Według Point-Free (2024), monitorowanie cache jest jedną z najbardziej niedocenianych praktyk optymalizacji wydajności aplikacji iOS.

Często zadawane pytania

Czym jest Disk Cache w iOS?

Disk Cache — technologia przechowywania danych na dysku urządzenia w celu przyspieszenia ponownego dostępu. W iOS wbudowany URLCache buforuje odpowiedzi HTTP, a programiści mogą tworzyć niestandardowe cache poprzez katalog Caches.

Czym różni się Disk Cache od RAM Cache?

RAM Cache (NSCache) przechowuje dane w pamięci operacyjnej — jest szybszy, ale ginie przy ponownym uruchomieniu aplikacji. Disk Cache jest wolniejszy, ale zachowuje dane między sesjami. Optymalna strategia wykorzystuje oba poziomy: pamięć dla gorących danych, dysk dla zimnych.

Czy iOS może usunąć mój cache?

Tak, system może usunąć zawartość katalogu Caches w dowolnym momencie przy braku miejsca. Dlatego nigdy nie przechowuj w cache danych, których nie można odzyskać. Dla dokumentów użytkownika używaj katalogu Documents.

Jak wybrać odpowiedni rozmiar cache?

Rozmiar cache zależy od typu danych: dla obrazów 100–500 MB, dla odpowiedzi API 10–50 MB, dla wideo do 1 GB. Śledź hit ratio — jeśli spada poniżej 50%, zwiększ rozmiar cache lub zmień strategię unieważniania.

Jak wyczyścić cache w aplikacji iOS?

URLCache.removeAllCachedResponses() czyści wbudowany cache. Dla niestandardowego cache usuń pliki z katalogu Caches przez FileManager. Zawsze zapewniaj użytkownikowi możliwość wyczyszczenia cache w ustawieniach aplikacji.

Podsumowanie

  • Disk Cache — tymczasowe przechowywanie danych na dysku w celu przyspieszenia ponownego dostępu i zmniejszenia ruchu sieciowego
  • URLCache — wbudowany mechanizm buforowania zapytań HTTP Foundation z obsługą Cache-Control
  • Caches directory — katalog Sandbox dla danych tymczasowych, czyszczony przez system przy braku miejsca
  • Unieważnianie cache odbywa się przez TTL, zdarzenie, wersję lub LRU — wybór zależy od typu danych
  • Hit ratio — kluczowa metryka wydajności cache: 70%+ dla obrazów, 40–60% dla API
  • Dwupoziomowa pamięć podręczna (RAM + Dysk) — standardowa architektura dla aplikacji iOS
  • Bezpieczeństwo — poufne dane nie powinny być buforowane na dysku bez szyfrowania

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ż