Sobes.tech
Middle+

Kā jūs realizētu atmiņas tīrīšanu, izmantojot uzglabātos tipus un atslēgas?

sobes.tech AI

Atbilde no AI

Es izmantotu NSCache vai specializētus kešatmiņas pārvaldniekus. NSCache automātiski pārvalda atmiņu, izņemot objektus, kad tas ir nepieciešams.

Piemērs ar NSCache:

import Foundation

class DataCache {
    private let cache = NSCache<NSString, NSData>() // Datu kešatmiņa

    func setData(_ data: Data, forKey key: String) {
        let nsKey = key as NSString
        let nsData = data as NSData
        cache.setObject(nsData, forKey: nsKey) // Saglabāt datus ar atslēgu
    }

    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 // Iegūt datus ar atslēgu
    }

    func removeData(forKey key: String) {
        let nsKey = key as NSString
        cache.removeObject(forKey: nsKey) // Dzēst datus ar atslēgu
    }

    func removeAllData() {
        cache.removeAllObjects() // Notīrīt visu kešatmiņu
    }
}

NSCache ir priekšrocības salīdzinājumā ar NSDictionary vai Swift.Dictionary:

  • Automātiska dzēšana: Dzēš objektus, kad ir maz atmiņas.
  • Daudzšaru drošība: Droši lietot no dažādām šahtām.
  • Vāji saites: Ne tur spēcīgas saites uz objektu, kas novērš atmiņas noplūdi.

Lai izveidotu sarežģītāku kešatmiņas loģiku (piemēram, ar derīguma termiņu vai ierobežotu izmēru), var izveidot savu pārvaldnieka klasi, kas ietver NSCache, vai izmantot citus mehānismus (piemēram, diska glabāšanu ar failu sistēmas pārvaldību).