Junior — Middle
Kuidas tuvastada mälus hoide tsüklid (retain cycle) rakenduste arendamisel?
sobes.tech AI
Vastus AI-lt
Retain cycles (hoidmis tsüklid) tekivad, kui kaks või enam objekti viitavad üksteisele tugevate viidetega, mille tulemusena mälu ei vabastata isegi siis, kui objektid enam ei ole vajalikud.
Selliste tsüklite tuvastamiseks iOS-is saab kasutada järgmisi meetodeid:
- Instruments tööriist (Leaks ja Allocations): võimaldab jälgida mälulekkeid ja näidata, millised objektid jäävad mällu.
- Xcode Memory Graph Debugger: visualiseerib objekte ja nende seoseid, aidates leida hoidmis tsükleid.
- Koodi analüüs tugevate viidete kasutamise kohta sulgudes ja delegaatides: sageli tekivad tsüklid tugevate viidete tõttu sulgudes (
closure) või delegaatides, mida tuleb märkida kuiweakvõiunowned.
Näide:
class ViewController {
var closure: (() -> Void)?
func setup() {
closure = {
print(self) // tugev viide self-le
}
}
}
Siin hoiab ViewController closure ja closure hoiab self — tekib tsükkel. Selle vältimiseks kasutatakse [weak self]:
closure = { [weak self] in
guard let self = self else { return }
print(self)
}
Nii ühendab hoidmistsüklite tuvastamine profiili tööriistad ja hoolika koodi analüüsi tugevate viidete osas.