Sobes.tech
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.