Middle+
Como implementaria a limpeza de memória através de tipos armazenados e chaves?
sobes.tech IA
Resposta da IA
Utilizaria NSCache ou gestores de cache especializados. NSCache gerencia automaticamente a memória, descarregando objetos quando há escassez.
Exemplo com NSCache:
import Foundation
class DataCache {
private let cache = NSCache<NSString, NSData>() // Cache para dados
func setData(_ data: Data, forKey key: String) {
let nsKey = key as NSString
let nsData = data as NSData
cache.setObject(nsData, forKey: nsKey) // Guardar dados por chave
}
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 // Obter dados por chave
}
func removeData(forKey key: String) {
let nsKey = key as NSString
cache.removeObject(forKey: nsKey) // Remover dados por chave
}
func removeAllData() {
cache.removeAllObjects() // Limpar toda a cache
}
}
NSCache tem vantagens sobre NSDictionary ou Swift.Dictionary para caching:
- Remoção automática: Remove objetos quando há escassez de memória.
- Segurança em múltiplas threads: Seguro para uso de diferentes threads.
- Referências fracas: Não mantém referências fortes aos objetos, prevenindo vazamentos de memória.
Para lógica de cache mais complexa (por exemplo, com expiração ou limite de tamanho), pode criar sua própria classe gerenciadora que encapsula NSCache ou usar outros mecanismos (como armazenamento em disco com gerenciamento via sistema de arquivos).