Sobes.tech
Junior — Middle

Jak lze vytvořit datovou strukturu, která uchovává slabé odkazy na objekty?

sobes.tech AI

Odpověď od AI

Pro vytvoření datové struktury, která uchovává slabé odkazy na objekty v iOS (Swift/Objective-C), se používá třída NSMapTable nebo NSHashTable s možností slabých odkazů.

Slabé odkazy umožňují objektům být uvolněny z paměti, pokud na ně nejsou žádné silné odkazy, čímž se předchází únikům paměti.

Pří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 // nyní může být objekt odstraněn z paměti

if let value = mapTable.object(forKey: key) {
    print("Objekt existuje")
} else {
    print("Objekt byl odstraněn")
}

Také lze použít Weak wrapper — obal s interní slabou referencí, pokud je potřeba vlastní datová struktura.

Tímto způsobem se pro ukládání slabých odkazů používá NSMapTable s konfigurací weak-to-weak nebo weak-to-strong, podle úkolu.