Middle+
Ինչպե՞ս կիրականացնեիք հիշողության մաքրման պահած տեսակների և բանալիների միջոցով։
sobes.tech AI
Պատասխան AI-ից
Ես կօգտագործեի NSCache կամ մասնագիտացված cache մենեջերներ։ NSCache ավտոմատ կերպով կառավարում է հիշողությունը և անհրաժեշտության դեպքում ազատում է օբյեկտները։
Օրինակ՝ NSCache-ի հետ.
import Foundation
class DataCache {
private let cache = NSCache<NSString, NSData>() // Տվյալների cache
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() // Բոլոր cache-ները մաքրել
}
}
NSCache-ը ունի առավելություններ NSDictionary կամ Swift.Dictionary-ի նկատմամբ՝
- Ավտոմատ հեռացում: Հեռացնում է օբյեկտները հիշողության պակասի դեպքում։
- Բազմա-թելային անվտանգություն: Անվտանգ է տարբեր թելերից օգտագործելու համար։
- Թույլ հղումներ: Չպահպանում է ուժեղ հղումներ օբյեկտներին, ինչը կանխում է հիշողության լիքերը։
Ավելին՝ ավելի բարդ cache-ների համար (օրինակ՝ ժամկետի ավարտ կամ չափի սահմանափակմամբ) կարող եք ստեղծել ձեր սեփական մենեջեր դասը, որը կօղակած լինի NSCache-ին կամ օգտագործել այլ մեխանիզմներ (օրինակ՝ պահպանում disk-ով և ֆայլային համակարգի կառավարման միջոցով):