Junior — Middle
Kas on võimalik, et tekivad tsüklilised viited, mis takistavad automaatse mälu halduri prügikoristust?
sobes.tech AI
Vastus AI-lt
Jah, iOS-is võib automaatse mäluhalduse (ARC) kasutamisel tekkida tsüklilisi viiteid (retain cycles). See juhtub, kui kaks või enam objekti hoiavad üksteist tugeva viitega, mis takistab viitearvuti jõudmist nulli ning objektid ei vabastata.
Selliste olukordade vältimiseks kasutatakse nõrku (weak) või omandamata (unowned) viiteid. Näiteks, delegaadid tavaliselt deklareeritakse kui weak, et vältida tsükleid.
Näide:
class Person {
var apartment: Apartment?
}
class Apartment {
weak var tenant: Person? // nõrk viide, mis takistab tsüklit
}
let john = Person()
let unit4A = Apartment()
john.apartment = unit4A
unit4A.tenant = john
Selles näites on tenant nõrk viide, seega tsüklit ei teki ning objektid vabastatakse korrektselt prügikogujaga.