Sobes.tech
Middle+

¿Cómo implementaría la limpieza de memoria mediante tipos almacenados y claves?

sobes.tech AI

Respuesta de la IA

Utilizaría NSCache o gestores de caché especializados. NSCache gestiona automáticamente la memoria, descargando objetos cuando hay escasez.

Ejemplo con NSCache:

import Foundation

class DataCache {
    private let cache = NSCache<NSString, NSData>() // Caché para datos

    func setData(_ data: Data, forKey key: String) {
        let nsKey = key as NSString
        let nsData = data as NSData
        cache.setObject(nsData, forKey: nsKey) // Guardar datos por clave
    }

    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 // Obtener datos por clave
    }

    func removeData(forKey key: String) {
        let nsKey = key as NSString
        cache.removeObject(forKey: nsKey) // Eliminar datos por clave
    }

    func removeAllData() {
        cache.removeAllObjects() // Limpiar toda la caché
    }
}

NSCache tiene ventajas sobre NSDictionary o Swift.Dictionary para caching:

  • Eliminación automática: Elimina objetos cuando hay escasez de memoria.
  • Seguridad en hilos: Seguro para usar desde diferentes hilos.
  • Referencias débiles: No mantiene referencias fuertes a los objetos, lo que previene fugas de memoria.

Para lógica de caché más compleja (por ejemplo, con expiración o límite de tamaño), se puede crear una clase gestor propia que envuelva NSCache o usar otros mecanismos (como almacenamiento en disco con gestión a través del sistema de archivos).