Sobes.tech
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).