Sobes.tech
Middle+

Bellek temizliğini saklanan türler ve anahtarlar aracılığıyla nasıl gerçekleştirirdiniz?

sobes.tech yapay zeka

AI'dan gelen yanıt

NSCache veya özel önbellek yöneticileri kullanırdım. NSCache otomatik olarak belleği yönetir ve ihtiyaç duyulduğunda nesneleri boşaltır.

NSCache ile örnek:

import Foundation

class DataCache {
    private let cache = NSCache<NSString, NSData>() // Veri önbelleği

    func setData(_ data: Data, forKey key: String) {
        let nsKey = key as NSString
        let nsData = data as NSData
        cache.setObject(nsData, forKey: nsKey) // Veri kaydet
    }

    func getData(forKey key: String) -> Data? {
        let nsKey = key as NSString
        guard let nsData = cache.object(forKey: nsKey) else {
            return nil
        }
        return nsData as Data // Veri getir
    }

    func removeData(forKey key: String) {
        let nsKey = key as NSString
        cache.removeObject(forKey: nsKey) // Veri sil
    }

    func removeAllData() {
        cache.removeAllObjects() // Tüm önbelleği temizle
    }
}

NSCache, NSDictionary veya Swift.Dictionary'a göre avantajlar sağlar:

  • Otomatik silme: Bellek yetersiz kaldığında nesneleri kaldırır.
  • Çoklu iş parçacığı güvenliği: Farklı iş parçacıklarından kullanılabilir.
  • Zayıf referanslar: Nesnelere güçlü referans tutmaz, bu da bellek sızıntılarını önler.

Daha karmaşık önbellekleme mantığı (örneğin, süresi dolma veya boyut sınırı ile) için kendi sınıfınızı oluşturabilir veya NSCache'i sarmalayan başka mekanizmalar kullanabilirsiniz (örneğin, disk üzerinde depolama ve dosya sistemi yönetimi).