Sobes.tech
Junior — Middle

Mis põhjustab mälupuhangute tekkimist rakendustes?

sobes.tech AI

Vastus AI-lt

Rakendustes mälulekkad tekivad, kui mälu, mis on eraldatud objektidele või andmetele, ei vabastata pärast seda, kui see enam ei ole vajalik. iOS-is on see sageli seotud:

  • Objekteva vaheliste tsükliliste viidetega (retention tsüklid), eriti ARC (Automaatne viidete arvutamine) kasutamisel. Näiteks, kui kaks objekti viitavad üksteisele tugevate viidetega, ei vabastata need.
  • Closure'ide vale kasutamisega, mis haaravad self tugeva viitega.
  • Ressursside, nagu ajastajad, jälgijad või failide kirjeldajad, vabastamata jätmisega.

Näide retention tsüklist closure'iga:

class ViewController {
    var closure: (() -> Void)?

    func setup() {
        closure = {
            print(self) // self on tugevalt haaratud, luues tsükli
        }
    }
}

Veadest hoidumiseks kasutatakse weak (nõrku) või unowned (mitteomandavaid) viiteid closure'ides ning tagatakse objektide elutsükli õige haldamine.