Sobes.tech
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:

  1. 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))
  1. Použití NSHashTable nebo NSMapTable

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.