Junior — Middle
Kus mälus või millises mehhanismis hallatakse viidet, mis ei suurenda viidete loendurit ega põhjusta objekti hoidmist?
sobes.tech AI
Vastus AI-lt
iOS-is, kasutades automaatset mäluhaldamist (ARC), on olemas nõrkade (weak) viidete mõiste. Nõrk viide on viide objekti, mis ei suurenda viidete loendit (retain count) ja ei hoia objekti mälus.
Sellised viited tavaliselt rakenduvad spetsiaalse mälu piirkonna kaudu, mida haldab ARC-süsteem, kasutades nõrkade näidikute mehhanismi. Kui viidatud objekt vabastatakse, seatakse nõrk viide automaatselt nil-iks, et vältida ripplinke.
Seega ei mõjuta nõrk viide objekti elutsüklit ega hoia seda mälus. See on kasulik tsükliliste viidete, näiteks delegeerija ja omaniku vahel, vältimiseks.
Näide Swiftis:
class Person {
var name: String
weak var delegate: PersonDelegate?
init(name: String) {
self.name = name
}
}
protocol PersonDelegate: AnyObject {
func didUpdateName()
}
Siin on delegate nõrk viide, mis ei suurenda viidete loendit ega hoia delegeerija objekti.