Middle+
Xotiralarni toifalar va kalitlar orqali xotirani tozalashni qanday amalga oshirasiz?
sobes.tech AI
AIdan javob
Men foydalanardim NSCache yoki maxsus cache menejerlarini. NSCache avtomatik ravishda xotirani boshqaradi va ehtiyoj bo'lsa ob'ektlarni chiqarib yuboradi.
NSCache bilan misol:
import Foundation
class DataCache {
private let cache = NSCache<NSString, NSData>() // Ma'lumotlar uchun cache
func setData(_ data: Data, forKey key: String) {
let nsKey = key as NSString
let nsData = data as NSData
cache.setObject(nsData, forKey: nsKey) // Ma'lumotlarni kalit bilan saqlash
}
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 // Kalit bilan ma'lumotlarni olish
}
func removeData(forKey key: String) {
let nsKey = key as NSString
cache.removeObject(forKey: nsKey) // Ma'lumotlarni kalit bilan o'chirish
}
func removeAllData() {
cache.removeAllObjects() // Barcha cache ni tozalash
}
}
NSCache NSDictionary yoki Swift.Dictionary ga nisbatan afzalliklarga ega:
- Avtomatik o'chirish: Xotira yetishmovchiligi bo'lsa, ob'ektlarni o'chiradi.
- Ko'p ipli xavfsizlik: Turli iplar bilan ishlash uchun xavfsiz.
- Yumshoq havolalar: Ob'ektlarga kuchli havolalarni tutmaydi, bu esa xotira oqib ketishining oldini oladi.
Kengroq cache logikasi uchun (masalan, muddati o'tgan yoki hajm cheklovli) o'zingizning menejer klassingizni yaratishingiz yoki NSCache ni o'z ichiga olgan boshqa mexanizmlardan foydalanishingiz mumkin (masalan, diskda saqlash va fayl tizimi orqali boshqarish).