Sobes.tech
Junior — Middle

Hoe implementeer je het opslaan van objecten met behulp van zwakke referenties in een collectie?

sobes.tech AI

Antwoord van AI

Op iOS, om objecten met behulp van zwakke verwijzingen in collecties op te slaan, kunnen verschillende benaderingen worden gebruikt, omdat standaardcollecties (bijvoorbeeld Array, Set, Dictionary) sterke verwijzingen naar objecten opslaan, wat kan leiden tot het langer in geheugen houden van objecten dan nodig is.

Belangrijkste methoden:

  1. Gebruik van een wrapper met weak eigenschap

Er wordt een wrapper-klasse gemaakt die een zwakke verwijzing naar het object bevat. Deze wrappers worden aan de collectie toegevoegd in plaats van de objecten zelf.

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. Gebruik van NSHashTable of NSMapTable

Deze Foundation-klassen maken het mogelijk om zwakke verwijzingen direct op te slaan.

let weakSet = NSHashTable<MyClass>.weakObjects()
weakSet.add(obj)

NSHashTable met de optie weakObjects slaat objecten automatisch zwak op, en wanneer een object wordt gedealloceerd, wordt het uit de collectie verwijderd.

Op deze manier worden in iOS, voor het zwak opslaan van objecten in collecties, meestal NSHashTable of wrappers met weak eigenschappen gebruikt.