Kako implementirati skladištenje objekata pomoću slabih referenci u kolekciji?
sobes.tech АИ
Одговор од АИ
На iOS, за чување објеката коришћењем слабих референци у колекцијама, може се користити више приступа, јер стандардне колекције (на пример, Array, Set, Dictionary) чувају јаке референце на објекте, што може довести до задржавања објеката у меморији дуже него што је потребно.
Главни начини:
- Користењем обвивке са
weakсвојством
Креира се класа-обвивка која садржи слабу референцу на објекат. Ове обвивке се додају у колекцију уместо самих објеката.
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))
- Користењем
NSHashTableилиNSMapTable
Ове класе из Foundation омогућавају директно чување слабих референци.
let weakSet = NSHashTable<MyClass>.weakObjects()
weakSet.add(obj)
NSHashTable са опцијом weakObjects аутоматски чува објекте слабо, и када објекат буде деалокиран, он се уклања из колекције.
На овај начин, у iOS-у се обично користе NSHashTable или обвивки са weak својствима за слабо чување објеката у колекцијама.