Junior — Middle
Πώς μπορεί να δημιουργηθεί μια δομή δεδομένων που διατηρεί ασθενείς αναφορές σε αντικείμενα;
sobes.tech AI
Απάντηση από AI
Για τη δημιουργία μιας δομής δεδομένων που αποθηκεύει ασθενείς αναφορές σε αντικείμενα σε iOS (Swift/Objective-C), χρησιμοποιείται η κλάση NSMapTable ή NSHashTable με την επιλογή ασθενών αναφορών.
Οι ασθενείς αναφορές επιτρέπουν στα αντικείμενα να απελευθερώνονται από τη μνήμη αν δεν υπάρχουν ισχυρές αναφορές σε αυτά, αποτρέποντας διαρροές μνήμης.
Παράδειγμα σε Swift με NSMapTable:
let mapTable = NSMapTable<NSString, AnyObject>.weakToWeakObjects()
let key = "key" as NSString
var object: NSObject? = NSObject()
mapTable.setObject(object, forKey: key)
object = nil // τώρα το αντικείμενο μπορεί να διαγραφεί από τη μνήμη
if let value = mapTable.object(forKey: key) {
print("Το αντικείμενο υπάρχει")
} else {
print("Το αντικείμενο διαγράφηκε")
}
Επίσης, μπορείτε να χρησιμοποιήσετε Weak wrapper — ένα περιτύλιγμα με μια εσωτερική ασθενή αναφορά, αν χρειάζεστε μια προσαρμοσμένη δομή δεδομένων.
Έτσι, για την αποθήκευση ασθενών αναφορών, χρησιμοποιείται το NSMapTable με διαμόρφωση weak-to-weak ή weak-to-strong, ανάλογα με την εργασία.