Disk Cache: o que é, cache de disco iOS e princípios de funcionamento

Autor: IT Sectr Publicado: 2026-07-11 Tempo de leitura: 7 min

Disk Cache é um mecanismo para armazenar temporariamente dados no disco do dispositivo, permitindo que aplicativos iOS acelerem o acesso repetido a recursos previamente carregados. De acordo com Apple Developer Documentation, 2024, Disk Cache reduz o uso de rede, diminui a carga da bateria e permite a operação do aplicativo em modo offline. O iOS fornece vários mecanismos de cache integrados: URLCache para requisições de rede, NSCache para memória RAM e implementações personalizadas através do diretório Caches.

Principais pontos

  • Disk Cache — armazenamento de dados em disco para acelerar o acesso repetido e reduzir o tráfego
  • URLCache — mecanismo integrado de cache de requisições HTTP no iOS
  • Diretório Caches — um diretório Sandbox dedicado para dados temporários do aplicativo
  • Invalidação de cache é crítica para a atualidade dos dados — estratégias por tempo, evento e versão
  • O sistema pode limpar o cache quando faltar espaço em disco — o cache não deve conter dados insubstituíveis

O que é Disk Cache no iOS?

Disk Cache é uma tecnologia para armazenar temporariamente dados no armazenamento permanente do dispositivo (memória flash) para acelerar requisições subsequentes aos mesmos dados. Ao contrário do cache RAM, o Disk Cache preserva os dados após reiniciar o aplicativo e até mesmo o dispositivo.

O iOS fornece dois níveis principais de cache: volátil (NSCache, memória) e baseado em disco (URLCache, sistema de arquivos). O cache em disco é 10 a 100 vezes mais lento que o volátil, mas significativamente mais rápido que uma requisição de rede — a diferença pode ser de 2 a 3 ordens de grandeza. A estratégia ótima utiliza um cache de dois níveis: memória para dados quentes e disco para dados frios.

De acordo com Apple Performance Optimization Guide, 2023, um Disk Cache configurado corretamente reduz o tempo de carregamento de conteúdo em 60–80% para visualizações repetidas e diminui o consumo de tráfego em 40–70%. Para aplicativos com conteúdo multimídia (imagens, vídeo, áudio), o cache é um fator crítico de UX.

URLCache: mecanismo integrado de cache

URLCache é uma classe integrada do Foundation que implementa um cache combinado para requisições URLSession. Ela salva automaticamente as respostas do servidor em disco e memória, gerenciando o tamanho do cache e as políticas de invalidação baseadas em cabeçalhos HTTP como Cache-Control, Expires e 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)

Políticas de cache do URLCache determinam quando usar dados em cache e quando realizar uma nova requisição. As principais políticas incluem: useProtocolCachePolicy (baseada nos cabeçalhos do servidor), reloadIgnoringLocalCacheData (sempre do servidor), returnCacheDataElseLoad (cache primeiro), returnCacheDataDontLoad (apenas cache — modo offline).

Cache-Control é um cabeçalho HTTP que o servidor envia junto com a resposta, especificando max-age (tempo de vida em segundos), must-revalidate (verificar atualidade), no-cache (não usar sem verificação) e no-store (não armazenar em cache). O iOS respeita estritamente esses cabeçalhos automaticamente ao usar URLCache com a política useProtocolCachePolicy.

Estratégias personalizadas de cache e invalidação

Cache personalizado é necessário quando o URLCache integrado é insuficiente — para armazenar imagens processadas, modelos de dados serializados ou resultados de cálculos. Nesses casos, os desenvolvedores criam seu próprio sistema de cache baseado no diretório Caches do Sandbox do aplicativo.

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

Estratégias de invalidação de cache determinam quando os dados armazenados são considerados obsoletos: TTL (Time-To-Live) — os dados vivem um tempo fixo após a escrita; baseada em eventos — invalidação por evento (ex.: atualização de dados no servidor); baseada em versão — invalidação ao alterar a versão da API ou formato dos dados; LRU (Least Recently Used) — remoção automática das entradas menos utilizadas ao exceder o limite de tamanho.

Regra prática: TTL é adequado para notícias e conteúdo que se torna obsoleto de forma previsível. Baseada em eventos para dados gerenciados pelo servidor via notificações push. Baseada em versão para configurações e caches de modelos de dados. LRU é uma escolha universal para arquivos de mídia com espaço em disco limitado.

Desempenho e limitações do cache

O desempenho do Disk Cache é medido pelo hit ratio — a porcentagem de requisições satisfeitas pelo cache sem chamada de rede. Um hit ratio típico para um cache de imagens bem configurado é de 70–90%, para respostas de API — 40–60%, para vídeo em streaming — 30–50%.

Tipo de dadosHit ratio típicoTamanho de cache recomendado
Imagens70–90%100–500 MB
Respostas API JSON40–60%10–50 MB
Vídeo/Áudio30–50%500 MB — 1 GB
Fontes e recursos90–99%5–20 MB
Conteúdo web50–70%50–200 MB

Limitações do Disk Cache no iOS: o sistema pode excluir o conteúdo do diretório Caches a qualquer momento quando o espaço em disco estiver baixo. Esse comportamento não é configurável — o iOS decide quando e quais arquivos em cache excluir. Portanto, o cache não deve conter dados que não possam ser recuperados da rede ou de outras fontes.

Impacto na memória flash: a escrita frequente no Disk Cache acelera o desgaste do armazenamento flash. O iOS usa TRIM e wear leveling para minimizar o desgaste, mas recomenda-se aos desenvolvedores evitar escritas excessivas: não atualizar o cache mais de uma vez a cada 5 minutos para o mesmo arquivo; agrupar pequenas escritas; usar NSCache para dados temporários que não precisam ser persistidos em disco.

Melhores práticas de cache no iOS

Cache de dois níveis é a arquitetura padrão para aplicativos iOS: memória (NSCache) para dados acessados com frequência, e disco (URLCache ou personalizado) para dados que devem persistir entre sessões. Tempo de vida na memória — minutos, no disco — horas ou dias.

Cache de imagens: use bibliotecas especializadas (Kingfisher, SDWebImage, Nuke) que implementam um cache de dois níveis com invalidação automática, gerenciamento de memória e escrita assíncrona em disco. Implementar um cache de imagens personalizado requer consideração de decodificação, espaço de cor e escala.

Cache e segurança: não armazene dados confidenciais (senhas, tokens, dados pessoais) em disco sem criptografia. O URLCache não criptografa dados por padrão — use NSFileProtection ou criptografia em nível de aplicativo para conteúdo sensível. Para requisições de rede autorizadas, use a política .reloadIgnoringLocalCacheData.

Monitoramento de cache: acompanhe o hit ratio, o tamanho atual do cache e as escritas por minuto. Se o hit ratio cair abaixo de 30%, o cache é ineficiente e requer revisão da estratégia ou aumento de tamanho. De acordo com Point-Free (2024), o monitoramento de cache é uma das práticas de otimização de desempenho mais subestimadas em aplicativos iOS.

Perguntas frequentes

O que é Disk Cache no iOS?

Disk Cache é uma tecnologia para armazenar dados no disco do dispositivo para acelerar o acesso repetido. O URLCache integrado do iOS armazena em cache respostas HTTP, e os desenvolvedores podem criar caches personalizados através do diretório Caches.

Como o Disk Cache difere do RAM Cache?

RAM Cache (NSCache) armazena dados na RAM — mais rápido, mas perdido ao reiniciar o aplicativo. O Disk Cache é mais lento, mas persiste entre sessões. A estratégia ótima usa ambos os níveis: memória para dados quentes, disco para dados frios.

O iOS pode excluir meu cache?

Sim, o sistema pode excluir o conteúdo do diretório Caches a qualquer momento quando o espaço em disco estiver baixo. Portanto, nunca armazene dados irrecuperáveis no cache. Use o diretório Documents para documentos do usuário.

Como escolher o tamanho correto do cache?

O tamanho do cache depende do tipo de dados: 100–500 MB para imagens, 10–50 MB para respostas de API, até 1 GB para vídeo. Monitore o hit ratio — se cair abaixo de 50%, aumente o tamanho do cache ou altere a estratégia de invalidação.

Como limpar o cache em um aplicativo iOS?

URLCache.removeAllCachedResponses() limpa o cache integrado. Para cache personalizado, exclua arquivos do diretório Caches via FileManager. Sempre forneça aos usuários a opção de limpar o cache nas configurações do aplicativo.

Resumo

  • Disk Cache — armazenamento temporário de dados em disco para acesso repetido mais rápido e tráfego reduzido
  • URLCache — cache de requisições HTTP integrado no Foundation com suporte a Cache-Control
  • Diretório Caches — diretório Sandbox para dados temporários, limpo pelo sistema quando o espaço está baixo
  • Invalidação é realizada por TTL, evento, versão ou LRU — a escolha depende do tipo de dados
  • Hit ratio — métrica chave de eficiência do cache: 70%+ para imagens, 40–60% para API
  • Cache de dois níveis (RAM + Disco) — arquitetura padrão para aplicativos iOS
  • Segurança — dados confidenciais não devem ser armazenados em cache no disco sem criptografia

Vamos desenvolver um aplicativo móvel chave na mão

A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.

Discutir o projeto

Leia também