Sobes.tech
Junior — Middle

Cum se implementează stocarea obiectelor folosind referințe slabe într-o colecție?

sobes.tech AI

Răspuns de la AI

Pe iOS, pentru stocarea obiectelor folosind referințe slabe în colecții, se pot folosi mai multe abordări, deoarece colecțiile standard (de exemplu, Array, Set, Dictionary) păstrează referințe puternice la obiecte, ceea ce poate duce la menținerea obiectelor în memorie mai mult decât este necesar.

Metode principale:

  1. Utilizarea unui wrapper cu proprietate weak

Se creează o clasă wrapper care conține o referință slabă la obiect. Aceste wrapper-uri sunt adăugate în colecție în locul obiectelor propriu-zise.

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. Utilizarea NSHashTable sau NSMapTable

Aceste clase din Foundation permit stocarea directă a referințelor slabe.

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

NSHashTable cu opțiunea weakObjects stochează automat obiectele slab, iar când un obiect este deallocat, acesta este eliminat din colecție.

Astfel, pentru stocarea obiectelor în mod slab în colecții pe iOS, se folosesc de obicei NSHashTable sau wrapper-uri cu proprietăți weak.