Junior — Middle
Jak implementovat ukládání objektů pomocí slabých odkazů v kolekci?
sobes.tech AI
Odpověď od AI
Na iOS lze pro ukládání objektů pomocí slabých odkazů v kolekcích použít několik přístupů, protože standardní kolekce (například Array, Set, Dictionary) ukládají silné odkazy na objekty, což může vést k tomu, že objekty zůstanou v paměti déle, než je třeba.
Hlavní způsoby:
- Použití obalu s vlastností
weak
Vytvoří se třída obalu, která obsahuje slabou referenci na objekt. Tyto obaly se přidávají do kolekce namísto samotných objektů.
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))
- Použití
NSHashTableneboNSMapTable
Tyto třídy z Foundation umožňují přímo ukládat slabé odkazy.
let weakSet = NSHashTable<MyClass>.weakObjects()
weakSet.add(obj)
NSHashTable s volbou weakObjects automaticky ukládá objekty slabě, a když je objekt uvolněn, je odstraněn z kolekce.
Tímto způsobem se v iOS běžně používají NSHashTable nebo obaly s vlastnostmi weak pro slabé ukládání objektů v kolekcích.