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