Junior — Middle
Mis on eraldatud mälu kaotus ja kuidas see võib rakenduses tekkida?
sobes.tech AI
Vastus AI-lt
iOS rakenduses mäluleke (memory leak) on olukord, kus rakendus jätkab viitamist objektidele, mis enam ei ole vajalikud, mille tulemusena mälu ei vabastata ning aja jooksul kulutatakse üha rohkem ressursse.
Põhjused:
- Tsüklilised viited (retain cycles) objektide vahel, eriti ARC (Automaatne viidete arvutamine) kasutamisel.
- Closure'ide kasutamine self'i haaramisega ilma nõrkade viideteta (weak/self).
- Ressursside ebaõige haldamine, näiteks delegeerijate vabastamata jätmine.
Näide retain cycle'ist closure'iga:
class ViewController {
var closure: (() -> Void)?
func setup() {
closure = {
print(self) // self haaramine ilma weak
}
}
}
Vältimiseks tuleks kasutada [weak self]:
closure = { [weak self] in
guard let self = self else { return }
print(self)
}
Regulaarne analüüs Xcode tööriistadega (Instruments — Leaks) aitab tuvastada ja kõrvaldada mälulekkeid.