Middle+
Эмне үчүн сакталган түрлөр жана ачкычтар аркылуу эс тутумду тазалоону ишке ашырмаксыз?
sobes.tech AI
AIден жооп
Мен NSCache же атайын кэш менеджерлерин колдонмокмун. NSCache автоматтык түрдө эс тутумун башкаруу менен объекттерди керектүү учурда чыгарып салат.
NSCache менен мисал:
import Foundation
class DataCache {
private let cache = NSCache<NSString, NSData>() // Маалыматтар үчүн кэш
func setData(_ data: Data, forKey key: String) {
let nsKey = key as NSString
let nsData = data as NSData
cache.setObject(nsData, forKey: nsKey) // Маалыматты ачкыч менен сактоо
}
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 // Ачкыч менен маалымат алуу
}
func removeData(forKey key: String) {
let nsKey = key as NSString
cache.removeObject(forKey: nsKey) // Маалыматты ачкыч менен өчүрүү
}
func removeAllData() {
cache.removeAllObjects() // Бардык кэшти тазалоо
}
}
NSCache NSDictionary же Swift.Dictionary салыштырмалуу артыкчылыктары:
- Автоматтык өчүрүү: Эс тутуму жетишпегенде объекттерди өчүрөт.
- Көп иштөөчүнүк: Бир нече жиптен колдонууга ылайыктуу.
- Слабые шилтемелер: Объекттерге күчтүү шилтемелерди кармабайт, бул эс тутумдун агып кетишин алдын алат.
Көбүрөөк логикасы бар кэштер үчүн (мисалы, мөөнөтү өтүү же өлчөм чектөө менен) өзүңүздүн менеджер классыңызды түзүп, ал NSCache-ти каптай алат же башка механизмдерди колдонсоңуз болот (мисалы, дискке сактоо жана файл тутуму аркылуу башкаруу).