Middle+
Hoe zou je het geheugen opschonen via opgeslagen types en sleutels?
sobes.tech AI
Antwoord van AI
Ik zou NSCache of gespecialiseerde cache-managers gebruiken. NSCache beheert automatisch het geheugen en verwijdert objecten indien nodig.
Voorbeeld met NSCache:
import Foundation
class DataCache {
private let cache = NSCache<NSString, NSData>() // Cache voor gegevens
func setData(_ data: Data, forKey key: String) {
let nsKey = key as NSString
let nsData = data as NSData
cache.setObject(nsData, forKey: nsKey) // Gegevens opslaan met sleutel
}
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 // Gegevens ophalen met sleutel
}
func removeData(forKey key: String) {
let nsKey = key as NSString
cache.removeObject(forKey: nsKey) // Gegevens verwijderen met sleutel
}
func removeAllData() {
cache.removeAllObjects() // Cache volledig wissen
}
}
NSCache heeft voordelen ten opzichte van NSDictionary of Swift.Dictionary voor caching:
- Automatisch verwijderen: Verwijdert objecten bij geheugen tekort.
- Threadveiligheid: Veilig te gebruiken vanuit verschillende threads.
- Zwakke referenties: Houdt geen sterke referenties aan objecten, wat geheugenlekken voorkomt.
Voor complexere cache-logica (bijvoorbeeld met vervaltijd of groottebeperking) kun je je eigen manager-klasse maken die NSCache omwikkelt of andere mechanismen gebruiken (zoals opslag op schijf met bestandsbeheer).