Middle+
Yadda yaddaşın təmizlənməsini saxlanılan növlər və açarlarla həyata keçirərdiniz?
sobes.tech Süni İntellekt
AI-dan cavab
NSCache və ya ixtisaslaşmış keş menecerlərindən istifadə edərdim. NSCache yaddaşı avtomatik idarə edir və ehtiyac olduqda obyektləri boşaldır.
NSCache ilə nümunə:
import Foundation
class DataCache {
private let cache = NSCache<NSString, NSData>() // Məlumatlar üçün keş
func setData(_ data: Data, forKey key: String) {
let nsKey = key as NSString
let nsData = data as NSData
cache.setObject(nsData, forKey: nsKey) // Məlumatları açar ilə yadda saxla
}
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 // Açar ilə məlumatları əldə et
}
func removeData(forKey key: String) {
let nsKey = key as NSString
cache.removeObject(forKey: nsKey) // Açar ilə məlumatları sil
}
func removeAllData() {
cache.removeAllObjects() // Bütün keşı təmizlə
}
}
NSCache NSDictionary və ya Swift.Dictionary-ə nisbətən üstünlüklərə malikdir:
- Avtomatik silmə: Yaddaş azaldıqda obyektləri silir.
- Çox ipli təhlükəsizlik: Müxtəlif ipliklərdən istifadə üçün təhlükəsiz.
- Zəif istinadlar: Ob'ektlərə güclü istinad tutmur, bu da yaddaş sızıntılarını qarşısını alır.
Daha mürəkkəb keş məntiqi üçün (məsələn, vaxt limiti və ya ölçü məhdudiyyəti ilə) öz idarəçi sinfinizi yarada və ya NSCache-i əhatə edən digər mexanizmlərdən istifadə edə bilərsiniz (məsələn, diskdə saxlama və fayl sistemi vasitəsilə idarəetmə).