Sobes.tech
Junior — Middle

Como pode criar uma estrutura de dados que mantém referências fracas a objetos?

sobes.tech IA

Resposta da IA

Para criar uma estrutura de dados que armazena referências fracas a objetos no iOS (Swift/Objective-C), usa-se a classe NSMapTable ou NSHashTable com a opção de referências fracas.

Referências fracas permitem que os objetos sejam libertados da memória se não houver referências fortes a eles, prevenindo fugas de memória.

Exemplo em Swift com NSMapTable:

let mapTable = NSMapTable<NSString, AnyObject>.weakToWeakObjects()

let key = "key" as NSString
var object: NSObject? = NSObject()
mapTable.setObject(object, forKey: key)

object = nil // agora o objeto pode ser removido da memória

if let value = mapTable.object(forKey: key) {
    print("Objeto existe")
} else {
    print("Objeto foi removido")
}

Também é possível usar Weak wrapper — um envoltório com uma referência fraca interna, se for necessária uma estrutura de dados personalizada.

Assim, para armazenar referências fracas, usa-se NSMapTable com configuração weak-to-weak ou weak-to-strong, dependendo da tarefa.