Middle+
Kako biste implementirali čišćenje memorije putem skladištenih tipova i ključeva?
sobes.tech АИ
Одговор од АИ
Koristio bih NSCache ili specijalizovane menadžere keš memorije. NSCache automatski upravlja memorijom, istovremeno uklanjajući objekte kada je to potrebno.
Primer sa NSCache:
import Foundation
class DataCache {
private let cache = NSCache<NSString, NSData>() // Keš za podatke
func setData(_ data: Data, forKey key: String) {
let nsKey = key as NSString
let nsData = data as NSData
cache.setObject(nsData, forKey: nsKey) // Sačuvaj podatke po ključevi
}
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 // Dobij podatke po ključevi
}
func removeData(forKey key: String) {
let nsKey = key as NSString
cache.removeObject(forKey: nsKey) // Ukloni podatke po ključevi
}
func removeAllData() {
cache.removeAllObjects() // Očisti ceo keš
}
}
NSCache ima prednosti u odnosu na NSDictionary ili Swift.Dictionary za keširanje:
- Automatsko uklanjanje: Uklanja objekte kada je memorija ograničena.
- Sigurnost u višestrukim nitima: Siguran za korišćenje iz više niti.
- Slabe reference: Ne drži jake reference na objekte, čime sprečava curenje memorije.
Za složeniju logiku keširanja (npr. sa vremenom isteka ili ograničenjem veličine), možete napraviti sopstvenu klasu menadžera koja obuhvata NSCache ili koristiti druge mehanizme (npr. skladištenje na disku sa upravljanjem putem fajl sistema).