Middle+
Kā jūs realizētu atmiņas tīrīšanu, izmantojot uzglabātos tipus un atslēgas?
sobes.tech AI
Atbilde no AI
Es izmantotu NSCache vai specializētus kešatmiņas pārvaldniekus. NSCache automātiski pārvalda atmiņu, izņemot objektus, kad tas ir nepieciešams.
Piemērs ar NSCache:
import Foundation
class DataCache {
private let cache = NSCache<NSString, NSData>() // Datu kešatmiņa
func setData(_ data: Data, forKey key: String) {
let nsKey = key as NSString
let nsData = data as NSData
cache.setObject(nsData, forKey: nsKey) // Saglabāt datus ar atslēgu
}
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 // Iegūt datus ar atslēgu
}
func removeData(forKey key: String) {
let nsKey = key as NSString
cache.removeObject(forKey: nsKey) // Dzēst datus ar atslēgu
}
func removeAllData() {
cache.removeAllObjects() // Notīrīt visu kešatmiņu
}
}
NSCache ir priekšrocības salīdzinājumā ar NSDictionary vai Swift.Dictionary:
- Automātiska dzēšana: Dzēš objektus, kad ir maz atmiņas.
- Daudzšaru drošība: Droši lietot no dažādām šahtām.
- Vāji saites: Ne tur spēcīgas saites uz objektu, kas novērš atmiņas noplūdi.
Lai izveidotu sarežģītāku kešatmiņas loģiku (piemēram, ar derīguma termiņu vai ierobežotu izmēru), var izveidot savu pārvaldnieka klasi, kas ietver NSCache, vai izmantot citus mehānismus (piemēram, diska glabāšanu ar failu sistēmas pārvaldību).