Junior — Middle
Hoe kun je een datastructuur maken die zwakke verwijzingen naar objecten bewaart?
sobes.tech AI
Antwoord van AI
Om een datastructuur te maken die zwakke verwijzingen naar objecten opslaat in iOS (Swift/Objective-C), wordt de klasse NSMapTable of NSHashTable gebruikt met de optie voor zwakke verwijzingen.
Zwakke verwijzingen stellen objecten in staat om vrijgegeven te worden uit het geheugen als er geen sterke verwijzingen naar hen zijn, wat geheugenlekken voorkomt.
Voorbeeld in Swift met NSMapTable:
let mapTable = NSMapTable<NSString, AnyObject>.weakToWeakObjects()
let key = "key" as NSString
var object: NSObject? = NSObject()
mapTable.setObject(object, forKey: key)
object = nil // nu kan het object uit het geheugen worden verwijderd
if let value = mapTable.object(forKey: key) {
print("Object bestaat")
} else {
print("Object is verwijderd")
}
Je kunt ook Weak wrapper gebruiken — een wrapper met een interne zwakke verwijzing, als je een aangepaste datastructuur nodig hebt.
Op deze manier wordt NSMapTable gebruikt met de configuratie weak-to-weak of weak-to-strong, afhankelijk van de taak.