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:
- Gebruik van een wrapper met
weakeigenschap
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))
- Gebruik van
NSHashTableofNSMapTable
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.