Sobes.tech
Junior — Middle

Kako implementirati skladištenje objekata pomoću slabih referenci u kolekciji?

sobes.tech АИ

Одговор од АИ

На iOS, за чување објеката коришћењем слабих референци у колекцијама, може се користити више приступа, јер стандардне колекције (на пример, Array, Set, Dictionary) чувају јаке референце на објекте, што може довести до задржавања објеката у меморији дуже него што је потребно.

Главни начини:

  1. Користењем обвивке са 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))
  1. Користењем NSHashTable или NSMapTable

Ове класе из Foundation омогућавају директно чување слабих референци.

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

NSHashTable са опцијом weakObjects аутоматски чува објекте слабо, и када објекат буде деалокиран, он се уклања из колекције.

На овај начин, у iOS-у се обично користе NSHashTable или обвивки са weak својствима за слабо чување објеката у колекцијама.