Junior — Middle
Milliseid samme tuleb astuda, et mäluhoos tekiks hoidmisring (Retain Cycle)?
sobes.tech AI
Vastus AI-lt
iOS-s toimuv Retain Cycle (hoidmis tsükkel) tekib, kui kaks või enam objekti hoiavad üksteist tugeva viitega, mis takistab nende vabastamist mälust, põhjustades mälulekke.
Retain Cycle'i tekkimiseks on vajalikud järgmised sammud:
- Objekt A sisaldab tugevat viidet objekti B-le.
- Objekt B sisaldab tugevat viidet objekti A-le.
- Ükski objekt ei vabastata, kuna viidete loendur ei jõua nulli.
Näide:
class A {
var b: B?
}
class B {
var a: A?
}
let a = A()
let b = B()
a.b = b
b.a = a // Hoiukeele tsükkel
Tsükli vältimiseks tehakse üks viidetest nõrk (weak) või omandamata (unowned). Näiteks:
class B {
weak var a: A?
}
Nii tekib hoiukeele tsükkel, kui on olemas vastastikused tugevad viited ilma katkestuseta, mis takistab objektide vabastamist.