Sobes.tech
Junior — Middle

Kuidas tuleks säilitada objekteid, kasutades nõrku viiteid kogumites?

sobes.tech AI

Vastus AI-lt

Selleks, et iOS-i (Swift või Objective-C) kogumikes objekte säilitada, kasutatakse tavaliselt spetsiaalseid konteinerid, mis ei hoia tugevaid viiteid objektidele, et vältida hoidmisringe ja mälulekkeid.

Swiftis saab kasutada NSHashTable või NSMapTable koos nõrga viidete valikuga:

let weakSet = NSHashTable<AnyObject>.weakObjects()
weakSet.add(someObject)

See võimaldab objekte säilitada ilma viitearvu suurendamata ning kui objekt vabastatakse, eemaldatakse see automaatselt kogumist.

Kui kasutate tavalisi kogumeid (näiteks massiive), saate objekte ümbritseda abistruktuuriga nõrkade viidete jaoks:

class WeakRef<T: AnyObject> {
    weak var value: T?
    init(value: T) {
        self.value = value
    }
}

var weakArray: [WeakRef<MyClass>] = []
weakArray.append(WeakRef(value: someObject))

Nii hoiab kogum nõrku viiteid ning objektid võivad vabastada, kui nendele ei viita enam tugevad viited.