Middle+
Kaip įgyvendintumėte atminties valymą naudojant saugomus tipus ir raktus?
sobes.tech AI
Atsakymas iš AI
Naudociau NSCache arba specializuotus cache valdytojus. NSCache automatiškai valdo atmintį, išlaisvindamas objektus, kai to reikia.
Pavyzdys su NSCache:
import Foundation
class DataCache {
private let cache = NSCache<NSString, NSData>() // Duomenų cache
func setData(_ data: Data, forKey key: String) {
let nsKey = key as NSString
let nsData = data as NSData
cache.setObject(nsData, forKey: nsKey) // Išsaugoti duomenis pagal raktą
}
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 // Gauti duomenis pagal raktą
}
func removeData(forKey key: String) {
let nsKey = key as NSString
cache.removeObject(forKey: nsKey) // Pašalinti duomenis pagal raktą
}
func removeAllData() {
cache.removeAllObjects() // Išvalyti visą cache
}
}
NSCache turi pranašumų prieš NSDictionary ar Swift.Dictionary:
- Automatinis pašalinimas: Pašalina objektus, kai trūksta atminties.
- Daugiasluoksnė saugumas: Saugu naudoti iš kelių gijų.
- Silpnos nuorodos: Nelaiko stiprių nuorodų į objektus, kas padeda išvengti atminties nutekėjimo.
Daug sudėtingesnei cache logikai (pvz., su galiojimo laiku ar dydžio apribojimu) galite sukurti savo valdymo klasę, kuri apgaubia NSCache, arba naudoti kitus mechanizmus (pvz., diske saugojimą su failų sistema).