Sobes.tech
Junior — Middle

Hogyan valósítható meg az objektumok tárolása gyenge hivatkozások segítségével egy gyűjteményben?

sobes.tech MI

Válasz az MI-től

Az iOS-en, az objektumok gyenge hivatkozásokkal való tárolására több megközelítés is létezik, mivel a standard kollekciók (például Array, Set, Dictionary) erős hivatkozásokat tárolnak az objektumokra, ami hosszabb ideig tarthatja azokat a memóriában, mint szükséges.

Fő módszerek:

  1. Gyenge tulajdonsággal ellátott wrapper használata

Létrehozunk egy wrapper osztályt, amely gyenge hivatkozást tartalmaz az objektumra. Ezek a wrapper-ek kerülnek a kollekcióba az objektumok helyett.

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 vagy NSMapTable használata

Ezek a Foundation osztályok lehetővé teszik, hogy közvetlenül gyenge hivatkozásokat tároljunk.

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

Az NSHashTable az weakObjects opcióval automatikusan gyenge hivatkozásokat tárol, és amikor az objektum felszabadul, eltávolításra kerül a kollekcióból.

Így az iOS-en általában az NSHashTable vagy gyenge tulajdonságokat tartalmazó wrapper-ek használata jellemző az objektumok gyenge tárolására kollekciókban.