Sobes.tech
Junior — Middle

Чӣ гуна метавон сохтори додаҳоро сохт, ки истинодҳои заиф ба объектҳоро нигоҳ дорад?

sobes.tech AI

Ҷавоб аз AI

Барои сохтани сохтори додаҳо, ки истинодҳои заиф ба объектҳоро дар iOS (Swift/Objective-C) нигоҳ медорад, аз синфи NSMapTable ё NSHashTable бо имконияти истинодҳои заиф истифода мешавад.

Истинодҳои заиф имкон медиҳанд, ки объектҳо аз хотира озод шаванд, агар ба онҳо истинодҳои қавӣ набошад, ки аз ҷараёни хотира пешгирӣ мекунад.

Масалан дар Swift бо NSMapTable:

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

калид = "key" ҳамчун NSString
объект = NSObject()
mapTable.setObject(object, бароиKey: калид)

объект = nil // ҳоло объект метавонад аз хотира хориҷ шавад

агар дархост кунед, ки арзиш = mapTable.object(forKey: калид) {
    чоп("Объект вуҷуд дорад")
} дигар {
    чоп("Объект хориҷ карда шуд")
}

Ҳамчунин метавон истифода бурд Weak wrapper — як пӯшиш бо истинод заиф дар дохили, агар структураи додаҳои худро дошта бошед.

Бинобар ин, барои нигоҳ доштани истинодҳои заиф, NSMapTable бо конфигуратсияҳои weak-to-weak ё weak-to-strong истифода мешавад, вобаста ба вазифа.