Чӣ гуна нигоҳдории объектҳоро бо истифода аз истинодҳои заиф дар коллексия амалӣ кардан мумкин аст?
sobes.tech AI
Ҷавоб аз AI
Дар iOS, барои нигоҳ доштани объектҳо бо истифода аз истинодҳои заиф дар коллексияҳо, метавон чанд роҳро истифода бурд, зеро коллектсияҳои стандартӣ (масалан, Array, Set, Dictionary) истинодҳои қавӣ ба объектҳоро нигоҳ медоранд, ки метавонад ба нигоҳ доштани объектҳо дар ёддошт дарозтар аз он ки лозим аст, оварда расонад.
Роҳҳои асосӣ:
- Истифодаи як орам бо хосияти
weak
Класс-орам сохта мешавад, ки дар он истиноди заиф ба объект нигоҳ дошта мешавад. Ин орамҳо ба ҷойи объектҳо ба коллектсия илова карда мешаванд.
class WeakRef<T: AnyObject> {
weak var value: T?
init(value: T) {
self.value = value
}
}
var weakArray = [WeakRef<MyClass>]()
let obj = MyClass()
weakArray.append(WeakRef(value: obj))
- Истифодаи
NSHashTableёNSMapTable
Ин синфҳо аз Foundation имкон медиҳанд, ки мустақиман истинодҳои заифро нигоҳ доранд.
let weakSet = NSHashTable<MyClass>.weakObjects()
weakSet.add(obj)
NSHashTable бо имконияти weakObjects автоматӣ объектҳоро заиф нигоҳ медорад, ва вақте объект озод карда мешавад, аз коллектсия хориҷ карда мешавад.
Бинобар ин, дар iOS барои нигоҳ доштани объектҳо бо заиф, одатан NSHashTable ё орамҳо бо хусусиятҳои weak истифода мешаванд.