Caches Directory: tanımı, önbellek yönetimi ve veri temizliği

Yazar: IT Sectr Yayınlanma: 2026-07-10 Okuma süresi: 10 dk

Caches Directory, iOS uygulamasının sandbox’ında bulunan ve ağdan geri yüklenebilecek veya yeniden yüklenebilecek geçici verileri depolamak için tasarlanmış bir dizindir. Apple File System Basics (2024)’e göre sistem, disk alanı boşaltmak için Caches Directory’den dosyaları herhangi bir zamanda silebilir. Uygulama, bu dosyaların yokluğunu doğru şekilde ele almalı ve gerektiğinde bunları geri yüklemelidir. Documents Directory’nin aksine, Caches’teki veriler iCloud ve iTunes yedeklemelerine dahil edilmez, bu da kullanıcının bulut deposu üzerindeki yükü azaltır.

Anahtar Noktalar

  • Caches Directory, ağdan geri yüklenebilecek veya yeniden oluşturulabilecek veriler için geçici bir depolama alanıdır.
  • iOS sistemi, cihazda alan yetersiz olduğunda Caches’ten herhangi bir zamanda dosyaları silebilir.
  • Caches’teki veriler iCloud ve iTunes yedeklemelerine dahil edilmez.
  • Dizine giden yol NSCachesDirectory veya FileManager.urls(for: .cachesDirectory) ile alınır.
  • Documents’tan temel farkı: Caches, kaybı kritik olan kullanıcı verileri için tasarlanmamıştır.

iOS’te Caches Directory Nedir?

Caches Directory, iOS uygulama sandbox’ı içinde, gerektiğinde geri yüklenebilecek verileri depolamak için optimize edilmiş bir dizindir. Documents Directory’nin aksine Caches, kullanıcı verileri için değil, uygulama performansını hızlandırmak için geçici bir depolama alanıdır.

iOS, önbelleğe alınmış ağ yanıtlarını, önceden yüklenmiş görselleri, serileştirilmiş nesneleri ve uygulamanın geri yükleyebileceği verileri depolamak için Caches Directory’yi kullanır. Geliştiriciler bu dizinde uzun süreli veri depolamaya güvenmemelidir.

Apple WWDC 2020’ye göre, iOS uygulamalarının yaklaşık %40’ı önbelleğe alınmış görselleri ve ağ verilerini depolamak için Caches Directory’yi kullanırken, geliştiricilerin %25’i bu dizinler arasındaki farkları anlamadıkları için Documents veya Application Support’ta olması gereken verileri yanlışlıkla Caches’e yerleştirmektedir.

Caches’in kritik bir özelliği: uygulama, sistem tarafından bir önbellek dosyası silindiğinde bu durumu doğru şekilde ele almalıdır. Önbelleği kaldırmak uygulama işlevselliğini bozuyorsa, veriler yanlış dizinde depolanıyor demektir.

Caches Directory Yolunu Alma

Swift’te, Caches Directory yoluna .cachesDirectory ile standart FileManager yöntemi kullanılarak erişilir. Bu, ağ verileriyle çalışan hemen her iOS uygulamasında kullanılan basit bir işlemdir.

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, NSCachesDirectory ile NSSearchPathForDirectoriesInDomains’i kullanır. Apple Swift API’sini önermesine rağmen, Caches Directory ile Objective-C kodu çalışmaya devam eder ve desteklenir.

objective-c
@import Foundation;

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

Swift projeleri URL tabanlı API’yi tercih etmelidir: tür güvenlidir ve SwiftUI ve Combine gibi modern framework’lerle daha iyi entegre olur.

Caches’te Hangi Veriler Depolanmalı

Caches Directory, uygulamanın performansı hızlandırmak için kullandığı birkaç veri kategorisi için idealdir, ancak tek bilgi kaynağı değildir. Önbelleğe almak için doğru verileri seçmek, UX’i ve uygulama performansını doğrudan etkiler.

Önbelleğe Alınmış Ağ Yanıtları

API’lerden JSON yanıtları, haber akışı verileri, nesne listeleri. Uygulamanın sunucudan yeniden indirebileceği her şey. HTTP yanıtlarının otomatik önbelleğe alınması için URLCache kullanın veya serileştirilmiş nesneleri manuel olarak kaydedin.

Görseller ve Medya Dosyaları

Ağdan indirilen görseller, Caches Directory’nin en yaygın kullanım durumudur. SDWebImage ve Kingfisher gibi kütüphaneler, varsayılan olarak önbelleğe alınmış görselleri Caches’e kaydeder.

Veri TürüCaches için UygunSaklama Süresi
JSON API yanıtlarıEvetSistem temizliğine kadar
Ağdaki görsellerEvetSistem temizliğine kadar
Hata ayıklama günlükleriKoşullutmp’de daha iyi
Oyun kayıtlarıHayırSadece Documents
Uygulama yapılandırmalarıHayırApplication Support

Veriler geri yüklenemiyorsa, Caches’e ait değillerdir. Bu en basit kriterdir: yarın sistemin Caches’teki tüm dosyaları sileceğini hayal edin. Uygulama doğru şekilde çalışmaya devam ediyorsa, veriler doğru şekilde depolanmıştır.

Sistem Önbellek Temizliğini Nasıl Yönetir

iOS, Caches Directory temizliğini otomatik olarak yönetir, ancak kesin tetikleyiciler ve algoritmalar Apple tarafından belgelenmemiştir. Sistemin, disk alanı azaldığında ve Offload Unused Apps özelliği etkin olduğunda Caches’ten dosyaları silebildiği bilinmektedir.

Temizleme süreci uygulama için şeffaftır: sistem bildirim yapmadan dosyaları siler. Uygulama, okumadan önce dosyanın varlığını kontrol etmeli ve yoksa yeniden oluşturmalıdır. Uzun süreli depolamaya güvenmemek, Caches ile çalışırken temel bir gerekliliktir.

Apple’ın “File System Basics” (2024) makalesine göre, uygulama Caches Directory’deki dosyaların oturumlar arasında kullanılabilir olmasını beklememelidir. Geliştiricilere bir yedekleme mekanizması uygulamaları önerilir: önbellekteki bir dosya eksikse, verileri ağdan indirin ve tekrar Caches’e kaydedin.

Ayrı bir senaryo da uygulama boşaltma (Offload) işlemidir. Bu özellik etkinleştirildiğinde, iOS uygulamayı kaldırır ancak Documents Directory’sini korur. Caches Directory bu işlem sırasında silinir. Uygulamayı geri yükleyen bir kullanıcı, önbelleğe alınmış verilere sahip olmaz. Uygulama bunları yeniden indirmelidir.

Caches Directory vs Temporary Directory

Caches ve Temporary (tmp) dizinleri arasındaki fark, geliştiriciler arasında sık sık kafa karışıklığına neden olur. Her iki dizin de geçici verileri depolar, ancak farklı yaşam süresi garantileri ve amaçlarla.

ÖzellikCaches DirectoryTemporary Directory
Yaşam süresiOturumdan oturuma (garantili değil)Sadece bir oturum içinde
Sistem temizliğiAlan azaldığındaOturum sonunda veya yeniden başlatmada
AmaçPerformansı hızlandırmak için önbellekÇok geçici veriler
ÖrnekÖnbelleğe alınmış görsellerDışa aktarmadan önce geçici dosya
YedeklemeHayırHayır

Uygulama başlatmaları arasında veri saklamak faydalıysa ancak geri yüklenebiliyorsa Caches’i seçin. Veriler sadece mevcut oturumda gerekiyorsa ve uygulama sonlandıktan sonra değeri yoksa tmp kullanın.

Caches ile Çalışmada En İyi Uygulamalar

Caches Directory ile çalışmak, veri kaybını, beklenmeyen uygulama davranışını ve performans sorunlarını önlemeye yardımcı olan birkaç kurala uymayı gerektirir.

Okumadan Önce Her Zaman Dosyanın Varlığını Kontrol Edin

FileManager.fileExists(atPath:), Caches’ten her okumadan önce çağrılmalıdır. Dosya eksikse, verileri kaynaktan yükleyin ve önbelleğe kaydedin. Caches’te bir dosyanın var olduğunu asla varsaymayın.

Önbellek Boyutunu Sınırlayın

Uygulamanızda Caches Directory için maksimum bir boyut belirleyin. Örneğin, görseller için 50 MB ve JSON yanıtları için 10 MB sınırı. Sınır aşıldığında, değiştirme tarihine göre en eski dosyaları silin.

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
}

Bu uygulamaları takip etmek, sistem önbellek temizleme eylemlerinden bağımsız olarak uygulamanın doğru çalışmasını ve kullanıcıların beklenmedik veri kaybıyla karşılaşmamasını sağlar.

Sıkça Sorulan Sorular

Caches Directory’yi temizlemeden önce sistem uygulamayı bilgilendirir mi?

Hayır, iOS, Caches’ten dosyaları silmeden önce bildirim göndermez. Temizleme süreci uygulama için tamamen şeffaftır. Silme işleminden haberdar olmanın tek yolu, bir dosyayı okumaya çalışmaktır. FileManager nil döndürür veya hata verir ve uygulama bu durumu ele almalıdır.

Kullanıcı Caches Directory’yi manuel olarak temizleyebilir mi?

Kullanıcıların Files veya iTunes aracılığıyla Caches Directory’ye doğrudan erişimi yoktur. Ancak, Ayarlar > Genel > Depolama üzerinden tüm uygulamaların önbelleğini temizleyebilir, belirli bir uygulamayı seçip “Uygulamayı Boşalt” düğmesine dokunabilirler. iOS, alan yetersiz olduğunda önbelleği otomatik olarak da temizleyebilir.

URLCache, Caches Directory’ye manuel kaydetmeden nasıl farklıdır?

URLCache, Foundation’dan HTTP istek önbelleğe alma için yerleşik bir mekanizmadır. Önbelleğe alınmış yanıtları otomatik olarak kaydeder ve yükler, içte Caches Directory’yi kullanır. Manuel kaydetme daha fazla kontrol sağlar: biçimi seçebilir, verileri şifreleyebilir ve her dosyanın ömrünü bireysel olarak yönetebilirsiniz.

Uygulama güncellendiğinde Caches Directory’ye ne olur?

Uygulama App Store üzerinden güncellendiğinde, Caches Directory korunur. Ancak, yeni güncelleme kurulum için daha fazla alan gerektiriyorsa içerik sistem tarafından silinebilir. Geliştirici, güncelleme sonrası Caches’in kalıcılığına güvenmemelidir. Bu, yedekleme mekanizması uygulamak için ek bir nedendir.

NSURLSession için otomatik önbelleğe alma nasıl devre dışı bırakılır?

Belirli bir NSURLSession oturumu için URLCache’i nil olarak ayarlayın veya .reloadIgnoringLocalCacheData önbellek politikasını kullanın. Boş önbellekle bir URLSessionConfiguration da oluşturabilirsiniz: sessionConfiguration.urlCache = nil. Bu, her zaman güncel olması gereken veriler için kullanışlıdır.

Özet

  • Caches Directory, ağdan geri yüklenebilecek veya yeniden oluşturulabilecek veriler için geçici depolamadır.
  • iOS sistemi, uygulamayı bilgilendirmeden herhangi bir zamanda Caches’ten dosyaları silebilir.
  • Caches’teki veriler iCloud ve iTunes yedeklemelerine dahil edilmez, yerden tasarruf sağlar.
  • Dizine giden yol Swift’te FileManager.urls(for: .cachesDirectory), Objective-C’de NSSearchPathForDirectoriesInDomains’dir.
  • Caches’te önbelleğe alınmış görseller, API JSON yanıtları ve diğer geri yüklenebilir veriler saklanır.
  • tmp’den farklı olarak Caches, başlatmalar arasında veri koruyabilir ancak garantisizdir.
  • Caches’ten okumadan önce her zaman dosyanın varlığını kontrol edin ve yedek yükleme uygulayın.

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun