Sobes.tech
Junior — Middle

Kolleksiyada zaif havolalar yordamida obyektlarni saqlashni qanday amalga oshirish mumkin?

sobes.tech AI

AIdan javob

iOS'da, kolleksiyalarda ob'ektlarni zaif havolalar bilan saqlash uchun bir nechta yondashuvlar mavjud, chunki standart kolleksiyalar (masalan, Array, Set, Dictionary) ob'ektlarga kuchli havolalar saqlaydi, bu esa ob'ektlarni kerakli vaqtdan ko'proq xotirada ushlab turishga olib kelishi mumkin.

Asosiy usullar:

  1. weak xususiyat bilan o'ramdan foydalanish

Ob'ektga zaif havola saqlaydigan o'ram sinfi yaratiladi. Bu o'ramlar kolleksiyaga ob'ektlar o'rniga qo'shiladi.

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 yoki NSMapTable dan foydalanish

Bu Foundation sinflari to'g'ridan-to'g'ri zaif havolalarni saqlash imkonini beradi.

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

NSHashTable weakObjects opsiyasi bilan ob'ektlarni avtomatik ravishda zaif saqlaydi va ob'ekt deallocatsiya qilinsa, u kolleksiyadan olib tashlanadi.

Shu tarzda, iOS'da ob'ektlarni zaif saqlash uchun odatda NSHashTable yoki weak xususiyatlar bilan o'ramlardan foydalaniladi.