Sobes.tech
Junior — Middle

Kā īstenot objektu glabāšanu, izmantojot vājas atsauces kolekcijā?

sobes.tech AI

Atbilde no AI

iOS, lai glabātu objektus ar vājinām saitēm kolekcijās, var izmantot vairākus pieejas, jo standarta kolekcijas (piemēram, Array, Set, Dictionary) glabā stipras saites uz objektiem, kas var novest pie to ilgāka uzturēšanas atmiņā nekā nepieciešams.

Galvenie veidi:

  1. Izmantot vājinātas īpašības ar weak

Tiek izveidota vājinātas īpašības ietverjoša klases ietvars, kas satur vājinātu atsauci uz objektu. Šie ietvari tiek pievienoti kolekcijai, nevis paši objekti.

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. Izmantot NSHashTable vai NSMapTable

Šīs Foundation klases ļauj tieši glabāt vājinātas atsauces.

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

NSHashTable ar weakObjects opciju automātiski glabā objektus vājināti, un, kad objekts tiek atbrīvots, tas tiek izņemts no kolekcijas.

Tādējādi iOS bieži izmanto NSHashTable vai vājinātas īpašības ar ietvariem, lai glabātu objektus vājināti kolekcijās.