Sobes.tech
Junior — Middle

Hogyan lehet olyan adatszerkezetet létrehozni, amely gyenge hivatkozásokat tartalmaz az objektumokra?

sobes.tech MI

Válasz az MI-től

Az iOS-on (Swift/Objective-C) objektumokra gyenge hivatkozásokat tároló adatszerkezet létrehozásához a NSMapTable vagy NSHashTable osztályt használják gyenge hivatkozási lehetőséggel.

A gyenge hivatkozások lehetővé teszik, hogy az objektumok felszabaduljanak a memóriából, ha nincs rájuk erős hivatkozás, ezáltal megelőzve a memória szivárgásokat.

Példa Swift-ben NSMapTable használatával:

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

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

object = nil // most az objektum törölhető a memóriából

if let value = mapTable.object(forKey: key) {
    print("Objektum létezik")
} else {
    print("Objektum törölve")
}

Szintén használható Weak wrapper — egy burkoló, amely belül gyenge hivatkozást tartalmaz, ha saját adatszerkezetet szeretnénk.

Így a gyenge hivatkozásokat az NSMapTable gyenge-gyenge vagy gyenge-erős konfigurációjával tárolják, a feladattól függően.