Sobes.tech
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-ти каптай алат же башка механизмдерди колдонсоңуз болот (мисалы, дискке сактоо жана файл тутуму аркылуу башкаруу).