Sobes.tech
Middle+

Kaip įgyvendintumėte atminties valymą naudojant saugomus tipus ir raktus?

sobes.tech AI

Atsakymas iš AI

Naudociau NSCache arba specializuotus cache valdytojus. NSCache automatiškai valdo atmintį, išlaisvindamas objektus, kai to reikia.

Pavyzdys su NSCache:

import Foundation

class DataCache {
    private let cache = NSCache<NSString, NSData>() // Duomenų cache

    func setData(_ data: Data, forKey key: String) {
        let nsKey = key as NSString
        let nsData = data as NSData
        cache.setObject(nsData, forKey: nsKey) // Išsaugoti duomenis pagal raktą
    }

    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 // Gauti duomenis pagal raktą
    }

    func removeData(forKey key: String) {
        let nsKey = key as NSString
        cache.removeObject(forKey: nsKey) // Pašalinti duomenis pagal raktą
    }

    func removeAllData() {
        cache.removeAllObjects() // Išvalyti visą cache
    }
}

NSCache turi pranašumų prieš NSDictionary ar Swift.Dictionary:

  • Automatinis pašalinimas: Pašalina objektus, kai trūksta atminties.
  • Daugiasluoksnė saugumas: Saugu naudoti iš kelių gijų.
  • Silpnos nuorodos: Nelaiko stiprių nuorodų į objektus, kas padeda išvengti atminties nutekėjimo.

Daug sudėtingesnei cache logikai (pvz., su galiojimo laiku ar dydžio apribojimu) galite sukurti savo valdymo klasę, kuri apgaubia NSCache, arba naudoti kitus mechanizmus (pvz., diske saugojimą su failų sistema).