Como implementar o armazenamento de objetos usando referências fracas numa coleção?
sobes.tech IA
Resposta da IA
No iOS, para armazenar objetos usando referências fracas em coleções, podem ser utilizados vários métodos, pois as coleções padrão (por exemplo, Array, Set, Dictionary) armazenam referências fortes aos objetos, o que pode levar a manter os objetos na memória por mais tempo do que o necessário.
Principais métodos:
- Uso de um wrapper com propriedade
weak
Cria-se uma classe wrapper que contém uma referência fraca ao objeto. Esses wrappers são adicionados à coleção em vez dos próprios objetos.
class WeakRef<T: AnyObject> {
weak var value: T?
init(value: T) {
self.value = value
}
}
var weakArray = [WeakRef<MyClass>]()
let obj = MyClass()
weakArray.append(WeakRef(value: obj))
- Uso de
NSHashTableouNSMapTable
Estas classes do Foundation permitem armazenar referências fracas diretamente.
let weakSet = NSHashTable<MyClass>.weakObjects()
weakSet.add(obj)
O NSHashTable com a opção weakObjects armazena objetos de forma fraca automaticamente, e quando o objeto é desalocado, ele é removido da coleção.
Dessa forma, para armazenar objetos de forma fraca em coleções no iOS, geralmente utilizam-se NSHashTable ou wrappers com propriedades weak.