Sobes.tech
Junior — Middle

Ako implementovať ukladanie objektov pomocou slabých odkazov v kolekcii?

sobes.tech AI

Odpoveď od AI

Na iOS, pre ukladania objektov s pomocou slabých odkazov v kolekciách je možné použiť niekoľko prístupov, pretože štandardné kolekcie (napríklad Array, Set, Dictionary) ukladajú silné odkazy na objekty, čo môže viesť k tomu, že objekty zostanú v pamäti dlhšie, než je potrebné.

Hlavné spôsoby:

  1. Použitie obalu s vlastnosťou weak

Vytvorí sa trieda obalu, ktorá obsahuje slabú referenciu na objekt. Tieto obaly sa pridávajú do kolekcie namiesto samotných objektov.

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. Použitie NSHashTable alebo NSMapTable

Tieto triedy z Foundation umožňujú priame uloženie slabých odkazov.

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

NSHashTable s možnosťou weakObjects automaticky uchováva objekty slabé, a keď je objekt deallocovaný, je odstránený z kolekcie.

Takto sa v iOS bežne používajú NSHashTable alebo obaly s vlastnosťami weak na slabé ukladanie objektov v kolekciách.