Disk Cache: nedir, iOS disk önbelleği ve çalışma prensipleri

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

Disk Cache, cihazın diskinde verileri geçici olarak depolayan bir mekanizmadır ve iOS uygulamalarının önceden yüklenmiş kaynaklara tekrar tekrar erişimini hızlandırır. Apple Developer Documentation, 2024'e göre, Disk Cache ağ kullanımını azaltır, pil yükünü düşürür ve uygulamanın çevrimdışı modda çalışmasını sağlar. iOS, birkaç yerleşik önbellek mekanizması sunar: ağ istekleri için URLCache, RAM için NSCache ve Caches dizini aracılığıyla özel uygulamalar.

Ana Noktalar

  • Disk Cache — tekrar erişimi hızlandırmak ve trafiği azaltmak için diskte veri depolama
  • URLCache — iOS'ta HTTP istekleri için yerleşik önbellek mekanizması
  • Caches dizini — uygulamanın geçici verileri için ayrılmış Sandbox dizini
  • Önbellek geçersiz kılma veri güncelliği için kritiktir — zamana dayalı, olaya dayalı ve sürüme dayalı stratejiler
  • Sistem önbelleği temizleyebilir disk alanı yetersiz olduğunda — önbellek değiştirilemez veriler içermemelidir

iOS'ta Disk Cache Nedir?

Disk Cache, aynı verilere yapılan sonraki istekleri hızlandırmak için cihazın kalıcı depolama alanında (flash bellek) verileri geçici olarak depolayan bir teknolojidir. RAM önbelleğinin aksine, Disk Cache uygulama ve hatta cihaz yeniden başlatıldıktan sonra bile verileri korur.

iOS iki ana önbellek düzeyi sağlar: uçucu (NSCache, bellek) ve disk tabanlı (URLCache, dosya sistemi). Disk önbelleği, uçucu önbellekten 10–100 kat daha yavaştır ancak bir ağ isteğinden önemli ölçüde daha hızlıdır — fark 2 ila 3 büyüklük mertebesinde olabilir. En uygun strateji, iki düzeyli bir önbellek kullanır: sıcak veriler için bellek, soğuk veriler için disk.

Apple Performance Optimization Guide, 2023'e göre, doğru yapılandırılmış bir Disk Cache, tekrar görüntülemelerde içerik yükleme süresini %60–80 oranında azaltır ve trafik tüketimini %40–70 oranında düşürür. Medya açısından zengin uygulamalar (görseller, video, ses) için önbellek önemli bir UX faktörüdür.

URLCache: Yerleşik Önbellek Mekanizması

URLCache, URLSession istekleri için birleşik bir önbellek uygulayan yerleşik bir Foundation sınıfıdır. Cache-Control, Expires ve ETag gibi HTTP başlıklarına dayalı olarak önbellek boyutunu ve geçersiz kılma politikalarını yöneterek sunucu yanıtlarını otomatik olarak diske ve belleğe kaydeder.

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)

URLCache önbellek politikaları, önbelleğe alınmış verilerin ne zaman kullanılacağını ve ne zaman yeni bir istek yapılacağını belirler. Ana politikalar şunları içerir: useProtocolCachePolicy (sunucu başlıklarına dayalı), reloadIgnoringLocalCacheData (her zaman sunucudan), returnCacheDataElseLoad (önce önbellek), returnCacheDataDontLoad (yalnızca önbellek — çevrimdışı mod).

Cache-Control, sunucunun yanıtla birlikte gönderdiği bir HTTP başlığıdır ve max-age (saniye cinsinden ömür), must-revalidate (güncelliği kontrol et), no-cache (doğrulama olmadan kullanma) ve no-store (önbelleğe alma) belirtir. iOS, useProtocolCachePolicy politikasıyla URLCache kullanırken bu başlıklara otomatik olarak sıkı bir şekilde uyar.

Özel Önbellek Stratejileri ve Geçersiz Kılma

Özel önbellek, yerleşik URLCache yetersiz olduğunda gereklidir — işlenmiş görselleri, serileştirilmiş veri modellerini veya hesaplama sonuçlarını depolamak için. Bu gibi durumlarda, geliştiriciler uygulamanın Sandbox'undaki Caches dizinine dayalı olarak kendi önbellek sistemlerini oluştururlar.

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

Önbellek geçersiz kılma stratejileri, depolanan verilerin ne zaman güncelliğini yitirdiğini belirler: TTL (Time-To-Live) — veriler yazıldıktan sonra sabit bir süre yaşar; olay odaklı — bir olaya dayalı geçersiz kılma (örn. sunucuda veri güncellemesi); sürüm tabanlı — API sürümü veya veri formatı değiştiğinde geçersiz kılma; LRU (Least Recently Used) — boyut sınırı aşıldığında en az kullanılan girişlerin otomatik olarak kaldırılması.

Pratik kural: TTL, tahmin edilebilir şekilde güncelliğini yitiren haberler ve içerikler için uygundur. Olay odaklı, push bildirimleri aracılığıyla sunucu tarafından yönetilen veriler içindir. Sürüm tabanlı, yapılandırmalar ve veri modeli önbellekleri içindir. LRU, sınırlı disk alanına sahip medya dosyaları için evrensel bir seçimdir.

Önbellek Performansı ve Sınırlamaları

Disk Cache performansı, isabet oranı (hit ratio) ile ölçülür — ağ çağrısı olmadan önbellekten karşılanan isteklerin yüzdesi. İyi yapılandırılmış bir görsel önbelleği için tipik isabet oranı %70–90, API yanıtları için %40–60, akış videosu için %30–50'dir.

Veri TürüTipik İsabet OranıÖnerilen Önbellek Boyutu
Görseller%70–90100–500 MB
API JSON yanıtları%40–6010–50 MB
Video/Ses%30–50500 MB — 1 GB
Yazı tipleri ve kaynaklar%90–995–20 MB
Web içeriği%50–7050–200 MB

iOS'ta Disk Cache sınırlamaları: sistem, disk alanı yetersiz olduğunda Caches dizininin içeriğini herhangi bir zamanda silebilir. Bu davranış yapılandırılamaz — iOS, önbellek dosyalarının ne zaman ve hangilerinin silineceğine karar verir. Bu nedenle, önbellek, ağdan veya diğer kaynaklardan kurtarılamayan verileri içermemelidir.

Flash belleğe etkisi: Disk Cache'e sık yazma, flash depolamanın aşınmasını hızlandırır. iOS, aşınmayı en aza indirmek için TRIM ve wear leveling kullanır, ancak geliştiricilerin aşırı yazmalardan kaçınmaları önerilir: aynı dosya için önbelleği 5 dakikada bir defadan fazla güncellemeyin; küçük yazmaları bir araya toplayın; diskte saklanması gerekmeyen geçici veriler için NSCache kullanın.

iOS'ta Önbellek İçin En İyi Uygulamalar

İki düzeyli önbellek, iOS uygulamaları için standart mimaridir: sık erişilen veriler için bellek (NSCache) ve oturumlar arasında kalıcı olması gereken veriler için disk (URLCache veya özel). Bellekte ömür — dakika, diskte — saatler veya günler.

Görsel önbelleğime: otomatik geçersiz kılma, bellek yönetimi ve eşzamansız disk yazma ile iki düzeyli önbellek uygulayan özel kitaplıklar (Kingfisher, SDWebImage, Nuke) kullanın. Özel bir görsel önbelleği uygulamak, kod çözme, renk alanı ve ölçeklendirmenin dikkate alınmasını gerektirir.

Önbellek ve güvenlik: hassas verileri (şifreler, token'lar, kişisel veriler) şifreleme olmadan diskte önbelleğe almayın. URLCache, varsayılan olarak verileri şifrelemez — hassas içerik için NSFileProtection veya uygulama düzeyinde şifreleme kullanın. Yetkilendirilmiş ağ istekleri için .reloadIgnoringLocalCacheData politikasını kullanın.

Önbellek izleme: isabet oranını, geçerli önbellek boyutunu ve dakika başına yazma sayısını izleyin. İsabet oranı %30'un altına düşersee, önbellek verimsizdir ve strateji gözden geçirmesi veya boyut artışı gerektirir. Point-Free (2024)'e göre, önbellek izleme, iOS uygulama performansı optimizasyonunun en hafife alınan uygulamalarından biridir.

Sıkça Sorulan Sorular

iOS'ta Disk Cache Nedir?

Disk Cache, tekrar erişimi hızlandırmak için cihazın diskinde veri depolayan bir teknolojidir. iOS'un yerleşik URLCache'i HTTP yanıtlarını önbelleğe alır ve geliştiriciler Caches dizini aracılığıyla özel önbellekler oluşturabilir.

Disk Cache, RAM Cache'den nasıl farklıdır?

RAM Cache (NSCache) verileri RAM'de depolar — daha hızlıdır ancak uygulama yeniden başlatıldığında kaybolur. Disk Cache daha yavaştır ancak oturumlar arasında kalıcıdır. En uygun strateji her iki düzeyi de kullanır: sıcak veriler için bellek, soğuk veriler için disk.

iOS önbelleğimi silebilir mi?

Evet, sistem disk alanı yetersiz olduğunda Caches dizininin içeriğini herhangi bir zamanda silebilir. Bu nedenle, önbellekte asla kurtarılamaz verileri depolamayın. Kullanıcı belgeleri için Documents dizinini kullanın.

Doğru önbellek boyutunu nasıl seçerim?

Önbellek boyutu veri türüne bağlıdır: görseller için 100–500 MB, API yanıtları için 10–50 MB, video için 1 GB'a kadar. İsabet oranını izleyin — %50'nin altına düşerse, önbellek boyutunu artırın veya geçersiz kılma stratejisini değiştirin.

Bir iOS uygulamasında önbellek nasıl temizlenir?

URLCache.removeAllCachedResponses() yerleşik önbelleği temizler. Özel önbellek için, FileManager aracılığıyla Caches dizinindeki dosyaları silin. Kullanıcılara her zaman uygulama ayarları aracılığıyla önbelleği temizleme seçeneği sunun.

Özet

  • Disk Cache — daha hızlı tekrar erişim ve azaltılmış trafik için diskte geçici veri depolama
  • URLCache — Cache-Control desteği ile yerleşik Foundation HTTP istek önbelleği
  • Caches dizini — geçici veriler için Sandbox dizini, alan yetersiz olduğunda sistem tarafından temizlenir
  • Geçersiz kılma TTL, olay, sürüm veya LRU ile yapılır — seçim veri türüne bağlıdır
  • İsabet oranı — temel önbellek verimlilik metriği: görseller için %70+, API için %40–60
  • İki düzeyli önbellek (RAM + Disk) — iOS uygulamaları için standart mimari
  • Güvenlik — hassas veriler şifreleme olmadan diskte önbelleğe alınmamalıdır

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