Sobes.tech
Junior — Middle

Comment implémenter le stockage d'objets à l'aide de références faibles dans une collection?

sobes.tech IA

Réponse de l'IA

Sur iOS, pour stocker des objets à l’aide de références faibles dans des collections, plusieurs approches peuvent être utilisées, car les collections standard (par exemple, Array, Set, Dictionary) stockent des références fortes aux objets, ce qui peut entraîner leur maintien en mémoire plus longtemps que nécessaire.

Principales méthodes :

  1. Utilisation d’un wrapper avec propriété weak

Une classe wrapper est créée, contenant une référence faible à l’objet. Ces wrappers sont ajoutés à la collection plutôt que les objets eux-mêmes.

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. Utilisation de NSHashTable ou NSMapTable

Ces classes de Foundation permettent de stocker directement des références faibles.

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

NSHashTable avec l’option weakObjects stocke automatiquement les objets faibles, et lorsque l’objet est désalloué, il est supprimé de la collection.

Ainsi, pour stocker des objets de manière faible dans des collections sur iOS, on utilise généralement NSHashTable ou des wrappers avec des propriétés weak.