Sobes.tech
Middle+

Hogyan valósítanád meg a memória tisztítását tárolt típusok és kulcsok segítségével?

sobes.tech MI

Válasz az MI-től

NSCache vagy specializált cache-kezelőket használnék. Az NSCache automatikusan kezeli a memóriát, és szükség esetén kiüríti az objektumokat.

Példa az NSCache-szel:

import Foundation

class DataCache {
    private let cache = NSCache<NSString, NSData>() // Adatok cache-e

    func setData(_ data: Data, forKey key: String) {
        let nsKey = key as NSString
        let nsData = data as NSData
        cache.setObject(nsData, forKey: nsKey) // Adatok mentése kulccsal
    }

    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 // Adatok lekérése kulccsal
    }

    func removeData(forKey key: String) {
        let nsKey = key as NSString
        cache.removeObject(forKey: nsKey) // Adatok törlése kulccsal
    }

    func removeAllData() {
        cache.removeAllObjects() // Az összes cache törlése
    }
}

Az NSCache előnyösebb a NSDictionary vagy Swift.Dictionary-nál a cache-eléshez:

  • Automatikus törlés: Memóriahiány esetén eltávolítja az objektumokat.
  • Több szál biztonság: Biztonságos több szálon való használatra.
  • Gyenge hivatkozások: Nem tart fenn erős hivatkozásokat az objektumokra, így megelőzve a memória szivárgásokat.

Komplexebb cache logikához (pl. lejárati idő vagy méretkorlát) saját kezelő osztályt hozhat létre, amely az NSCache-t burkolja, vagy más mechanizmusokat használ (pl. lemezre mentés fájlrendszerrel való kezelés).