Sobes.tech
Middle+

Yadda yaddaşın təmizlənməsini saxlanılan növlər və açarlarla həyata keçirərdiniz?

sobes.tech Süni İntellekt

AI-dan cavab

NSCache və ya ixtisaslaşmış keş menecerlərindən istifadə edərdim. NSCache yaddaşı avtomatik idarə edir və ehtiyac olduqda obyektləri boşaldır.

NSCache ilə nümunə:

import Foundation

class DataCache {
    private let cache = NSCache<NSString, NSData>() // Məlumatlar üçün keş

    func setData(_ data: Data, forKey key: String) {
        let nsKey = key as NSString
        let nsData = data as NSData
        cache.setObject(nsData, forKey: nsKey) // Məlumatları açar ilə yadda saxla
    }

    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 // Açar ilə məlumatları əldə et
    }

    func removeData(forKey key: String) {
        let nsKey = key as NSString
        cache.removeObject(forKey: nsKey) // Açar ilə məlumatları sil
    }

    func removeAllData() {
        cache.removeAllObjects() // Bütün keşı təmizlə
    }
}

NSCache NSDictionary və ya Swift.Dictionary-ə nisbətən üstünlüklərə malikdir:

  • Avtomatik silmə: Yaddaş azaldıqda obyektləri silir.
  • Çox ipli təhlükəsizlik: Müxtəlif ipliklərdən istifadə üçün təhlükəsiz.
  • Zəif istinadlar: Ob'ektlərə güclü istinad tutmur, bu da yaddaş sızıntılarını qarşısını alır.

Daha mürəkkəb keş məntiqi üçün (məsələn, vaxt limiti və ya ölçü məhdudiyyəti ilə) öz idarəçi sinfinizi yarada və ya NSCache-i əhatə edən digər mexanizmlərdən istifadə edə bilərsiniz (məsələn, diskdə saxlama və fayl sistemi vasitəsilə idarəetmə).