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