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.