Sobes.tech
Junior — Middle

Kaip įgyvendinti objektų saugojimą naudojant silpnus nuorodas kolekcijoje?

sobes.tech AI

Atsakymas iš AI

iOS, norint saugoti objektus naudojant silpnus nuorodus kolekcijose, galima naudoti kelis metodus, nes standartinės kolekcijos (pvz., Array, Set, Dictionary) saugo stiprias nuorodas į objektus, kas gali lemti jų ilgalaikį išlaikymą atmintyje.

Pagrindiniai būdai:

  1. Naudoti weak savybę turintį apvalkalą

Sukuriama apvalkalo klasė, kuri turi silpną nuorodą į objektą. Šie apvalkalai yra pridedami į kolekciją vietoj pačių objektų.

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. Naudoti NSHashTable arba NSMapTable

Šie Foundation klasės leidžia tiesiogiai saugoti silpnus nuorodų objektus.

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

NSHashTable su weakObjects parinktimi automatiškai saugo objektus silpnai, ir kai objektas yra išlaisvinamas, jis pašalinamas iš kolekcijos.

Taip iOS dažnai naudojami NSHashTable arba apvalkalai su weak savybėmis, siekiant saugoti objektus silpnai kolekcijose.