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.