Middle+
Cum ați implementa curățarea memoriei prin tipuri stocate și chei?
sobes.tech AI
Răspuns de la AI
Aș folosi NSCache sau gestionare specializată a cache-ului. NSCache gestionează automat memoria, descărcând obiectele atunci când este nevoie.
Exemplu cu NSCache:
import Foundation
class DataCache {
private let cache = NSCache<NSString, NSData>() // Cache pentru date
func setData(_ data: Data, forKey key: String) {
let nsKey = key as NSString
let nsData = data as NSData
cache.setObject(nsData, forKey: nsKey) // Salvare date după cheie
}
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 // Obține date după cheie
}
func removeData(forKey key: String) {
let nsKey = key as NSString
cache.removeObject(forKey: nsKey) // Șterge date după cheie
}
func removeAllData() {
cache.removeAllObjects() // Golește întreg cache-ul
}
}
NSCache are avantaje față de NSDictionary sau Swift.Dictionary pentru caching:
- Ștergere automată: Șterge obiecte când memoria este insuficientă.
- Siguranță în multi-threading: Sigur pentru utilizare din mai multe fire.
- Referințe slabe: Nu menține referințe puternice către obiecte, prevenind scurgerile de memorie.
Pentru logica de cache mai complexă (de exemplu, cu expirare sau limitare de dimensiune), puteți crea propria clasă manager care înfășoară NSCache sau utiliza alte mecanisme (de exemplu, stocare pe disc cu gestionare prin sistemul de fișiere).