Sobes.tech
Junior — Middle

Come si può creare una struttura dati che conserva riferimenti deboli agli oggetti?

sobes.tech AI

Risposta dell'AI

Per creare una struttura dati che memorizza riferimenti deboli agli oggetti in iOS (Swift/Objective-C), si utilizza la classe NSMapTable o NSHashTable con l'opzione di riferimenti deboli.

I riferimenti deboli permettono agli oggetti di essere liberati dalla memoria se non ci sono riferimenti forti, prevenendo perdite di memoria.

Esempio in Swift con NSMapTable:

let mapTable = NSMapTable<NSString, AnyObject>.weakToWeakObjects()

let key = "key" as NSString
var object: NSObject? = NSObject()
mapTable.setObject(object, forKey: key)

object = nil // ora l'oggetto può essere rimosso dalla memoria

if let value = mapTable.object(forKey: key) {
    print("Oggetto esiste")
} else {
    print("Oggetto è stato rimosso")
}

Puoi anche usare Weak wrapper — un involucro con una referenza debole interna, se hai bisogno di una struttura dati personalizzata.

In questo modo, per memorizzare riferimenti deboli si utilizza NSMapTable con configurazione weak-to-weak o weak-to-strong, a seconda del compito.