Sobes.tech
Junior — Middle

Ako vytvoriť dátovú štruktúru, ktorá uchováva slabé odkazy na objekty?

sobes.tech AI

Odpoveď od AI

Na vytvorenie dátovej štruktúry, ktorá uchováva slabé odkazy na objekty v iOS (Swift/Objective-C), sa používa trieda NSMapTable alebo NSHashTable s možnosťou slabých odkazov.

Slabé odkazy umožňujú objektom byť uvoľnené z pamäti, ak na ne nie sú žiadne silné odkazy, čím sa predchádza únikom pamäti.

Príklad v Swift s NSMapTable:

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

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

object = nil // teraz môže byť objekt odstránený z pamäti

if let value = mapTable.object(forKey: key) {
    print("Objekt existuje")
} else {
    print("Objekt bol odstránený")
}

Tiež je možné použiť Weak wrapper — obal s internou slabou referenciou, ak je potrebná vlastná dátová štruktúra.

Týmto spôsobom sa na ukladanie slabých odkazov používa NSMapTable s konfiguráciou weak-to-weak alebo weak-to-strong, podľa úlohy.