Sobes.tech
Junior — Middle

Как да реализираме съхранението на обекти с помощта на слаби препратки в колекция?

sobes.tech AI

Отговор от AI

В 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 свойства.