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:
- 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))
- Použitie
NSHashTablealeboNSMapTable
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.