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