Sobes.tech
Junior — Middle

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

sobes.tech AI

Ҷавоб аз AI

Дар iOS, барои нигоҳ доштани объектҳо бо истифода аз истинодҳои заиф дар коллексияҳо, метавон чанд роҳро истифода бурд, зеро коллектсияҳои стандартӣ (масалан, Array, Set, Dictionary) истинодҳои қавӣ ба объектҳоро нигоҳ медоранд, ки метавонад ба нигоҳ доштани объектҳо дар ёддошт дарозтар аз он ки лозим аст, оварда расонад.

Роҳҳои асосӣ:

  1. Истифодаи як орам бо хосияти 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))
  1. Истифодаи NSHashTable ё NSMapTable

Ин синфҳо аз Foundation имкон медиҳанд, ки мустақиман истинодҳои заифро нигоҳ доранд.

let weakSet = NSHashTable<MyClass>.weakObjects()
weakSet.add(obj)

NSHashTable бо имконияти weakObjects автоматӣ объектҳоро заиф нигоҳ медорад, ва вақте объект озод карда мешавад, аз коллектсия хориҷ карда мешавад.

Бинобар ин, дар iOS барои нигоҳ доштани объектҳо бо заиф, одатан NSHashTable ё орамҳо бо хусусиятҳои weak истифода мешаванд.