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