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.